Errori, bug, domande - pagina 1875

 

Probabilmente perché lo chiamate manualmente nella funzione OnStart().

I distruttori di oggetti statici sono chiamati dopo questa funzione in ordine inverso alla dichiarazione.

 
Koldun Zloy:

Probabilmente perché lo chiamate manualmente nella funzione OnStart().

I distruttori di oggetti statici sono chiamati dopo questa funzione in ordine inverso alla dichiarazione.

Sembra che tutto dovrebbe funzionare correttamente qui
template <typename T>
struct PTR
{
  T* Ptr;
  
  PTR( void )
  {
  }
  
  void operator =( T* &Value )
  {
    this.Ptr = Value;
  }
  
  ~PTR( void )
  {
    Print(__FUNCSIG__);
    delete this.Ptr;
  }
};

class CLASS
{
private:
  static PTR<CLASS> Ptr;
  static CLASS* Tmp;
  
  CLASS()
  {
    CLASS::Ptr = CLASS::Tmp;
  }
};

static PTR<CLASS> CLASS::Ptr;
static CLASS* CLASS::Tmp = new CLASS;

void OnStart()
{
}

Ma la perdita si verifica. Dov'è il problema?

 
fxsaber:
Penso che tutto debba funzionare correttamente qui

Ma la fuga di notizie sta avvenendo. Dov'è il problema?


Si creano due oggetti e se ne cancella solo uno.

Perché avete bisogno dell'oggettoCLASS::Tmp?

 
Koldun Zloy:


Si creano due oggetti e se ne cancella solo uno.

A che punto vengono creati due oggetti?

Perché avete bisogno di un oggettoCLASS::Tmp?

Grazie a voi non ce n'è bisogno. Ma per capire il linguaggio, vorrei ancora capire perché l'esempio causa perdite.

Gli oggetti nascosti con costruttori nascosti sono logici in alcuni casi, però (probabilmente il più pervasivo).

 

Sì, mi sono sbagliato. Avete solo un oggetto che viene creato e non cancellato.

Perché quando chiamate il costruttore

  CLASS()
  {
    CLASS::Ptr = CLASS::Tmp;
  }

CLASS::Tmp contiene ancora spazzatura, non l'indirizzo dell'oggetto.

 
1) Viene creata la struttura static PTR<CLASS> CLASS::Ptr;
2) viene creata la classe, new CLASS; esegue il costruttore CLASS()e CLASS::Ptr viene assegnato Null
3) Il valore di CLASS::Tmp è aggiornato dal puntatore al nuovo CLASS
4) Cancella la struttura PTR<CLASS> CLASS::Ptr; esegue il distruttore, prova a cancellare CLASS::Ptr (è Null)
 
Koldun Zloy:

CLASS::Tmp contiene ancora spazzatura, non l'indirizzo di un oggetto.

Grazie! In qualche modo non avevo notato questa ovvietà.

Sergey Dzyublik:
1) Viene creata una struttura statica PTR<CLASS> CLASS::Ptr;
2) Crea una classe, new CLASS; esegue il costruttore CLASS()eCLASS::Ptr è assegnato Null
3) Il valore di CLASS::Tmp è aggiornato dal puntatore al nuovo CLASS
4) Cancella la struttura PTR<CLASS> CLASS::Ptr; esegue il distruttore, prova a cancellare CLASS::Ptr (è Null)

Grazie. Ma non è Null, è spazzatura.

 

Sarebbe bene che la modalità

ChartSetInteger( 0,CHART_SHOW,false );

non visualizzerebbe le frecce dei trade (entrate/uscite). Non c'è affatto bisogno di loro lì.

 
Ragazzi, domanda fuori tema, sono un novellino, vorrei ordinare un lavoro, ora ho 0 sul mio saldo, posso aprire un tema? o devo ricaricare il mio conto all'inizio? un po' confuso quando bloccano i soldi dal mio conto...
 
The service is unavailable.
Sono andato a prendere della tintura di valeriana...(
Motivazione: