In effetti, è logico che non funzioni. Non potete fare in modo che il distruttore di un puntatore intelligente sia chiamato prima del distruttore della classe.
fxsaber: Grazie! Ho provato diverse varianti, ma non funzionano.
In realtà, è logico che non funzioni. Non potete fare in modo che il distruttore di un puntatore intelligente sia chiamato prima del distruttore della classe.
Provate il seguente modo:
template < typename T >
struct PTR
{
T* Ptr;
PTR( T* Value ) : Ptr( Value )
{
}
~PTR()
{
Print(__FUNCSIG__);
delete Ptr;
}
};
class CLASS
{
private:
static PTR< CLASS > Ptr;
public:
CLASS()
{
Print(__FUNCSIG__);
}
~CLASS()
{
Print(__FUNCSIG__);
}
};
static PTR< CLASS > CLASS::Ptr( new CLASS );
voidOnStart()
{
}
Non so cosa stai facendo, ma in MQL rendere il costruttore privato ha senso solo per il singleton.
Grazie per l'esempio dettagliato! Sfortunatamente, non ha un costruttore chiuso. Non funziona così con una chiusa, ovviamente.
Ciò di cui ho bisogno è che esista un oggetto che sia nascosto a tutti. Allo stesso tempo, nessun altro oggetto di questo tipo potrebbe essere creato in alcun modo.
Perché il distruttore del puntatore intelligente è chiamato prima del distruttore della classe nella tua versione, ma il contrario nella mia (anche se il costruttore è pubblico)?
Perché il distruttore del puntatore intelligente è chiamato prima del distruttore della classe nella tua versione e il contrario nella mia (anche se il costruttore è pubblico)?
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Se siete sicuri che il costruttore deve essere privato, non c'è altro modo.
Un puntatore intelligente è un oggetto che contiene un puntatore semplice e assicura che venga rimosso in tempo.
Questa è l'opzione più semplice.
Ci sono puntatori intelligenti più complessi.
È scritto molto bene su di loro in questo libro: https://rsdn.org/res/book/cpp/cpp_real_programmers.xml
In effetti, è logico che non funzioni. Non potete fare in modo che il distruttore di un puntatore intelligente sia chiamato prima del distruttore della classe.
Invece di specificare l'errore e dove si verifica, il compilatore dà un errore interno non specificato #112
Grazie! Ho provato diverse varianti, ma non funzionano.
In realtà, è logico che non funzioni. Non potete fare in modo che il distruttore di un puntatore intelligente sia chiamato prima del distruttore della classe.
Provate il seguente modo:
Non so cosa stai facendo, ma in MQL rendere il costruttore privato ha senso solo per il singleton.
Provate in questo modo:
Grazie per l'esempio dettagliato! Sfortunatamente, non ha un costruttore chiuso. Non funziona così con una chiusa, ovviamente.
Ciò di cui ho bisogno è che esista un oggetto che sia nascosto a tutti. Allo stesso tempo, nessun altro oggetto di questo tipo potrebbe essere creato in alcun modo.
per emettere questo nel registro di esecuzione?
Ed è corretto che la __FUNCSIG__ del costruttore/distruttore dia un tipo void?
Prova in questo modo:
Ho bisogno di avere un oggetto che sia nascosto a tutti. Allo stesso tempo, un altro oggetto di questo tipo non poteva essere creato in alcun modo.
È così che si chiama:"Singleton".
Perché dici che non è adatto a te?
Ecco un esempio di un singleton.
È corretto in tal caso
per emettere questo nel registro di esecuzione?
Ed è corretto che la __FUNCSIG__ del costruttore/distruttore dia un tipo void?
Non fare mai
È corretto emettere questo nel registro di esecuzione in un caso simile?
Ed è corretto che la __FUNCSIG__ del costruttore/distruttore emetta void-type?
Sì, è così.
È così che si chiama:"Singleton".
Perché dici che non ti si addice?
Ecco un esempio di un singleton.
Grazie mille, funziona!
Ma rimane ancora un mistero.
Forum sul trading, sistemi di trading automatico e test di strategia
Bug, bug, domande
fxsaber, 2017.04.25 10:34
Perché il distruttore del puntatore intelligente è chiamato prima del distruttore della classe nella tua versione e il contrario nella mia (anche se il costruttore è pubblico)?