Fehler, Irrtümer, Fragen - Seite 1875

 

Wahrscheinlich, weil Sie sie manuell in der Funktion OnStart() aufrufen.

Destruktoren von statischen Objekten werden nach dieser Funktion in umgekehrter Reihenfolge der Deklaration aufgerufen.

 
Koldun Zloy:

Wahrscheinlich, weil Sie sie manuell in der Funktion OnStart() aufrufen.

Destruktoren von statischen Objekten werden nach dieser Funktion in umgekehrter Reihenfolge der Deklaration aufgerufen.

Es scheint, dass hier alles korrekt funktionieren sollte
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()
{
}

Aber das Leck tritt auf. Wo liegt das Problem?

 
fxsaber:
Ich denke, hier muss alles richtig funktionieren

Aber das Leck ist vorhanden. Wo liegt das Problem?


Sie legen zwei Objekte an und löschen nur eines.

Warum brauchen Sie dasCLASS::Tmp-Objekt?

 
Koldun Zloy:


Sie legen zwei Objekte an und löschen nur eines.

Zu welchem Zeitpunkt werden zwei Objekte erstellt?

Warum brauchen Sie einCLASS::Tmp-Objekt?

Dank Ihnen ist das nicht nötig. Aber um die Sprache zu verstehen, möchte ich immer noch verstehen, warum das Beispiel ein Leck verursacht.

Versteckte Objekte mit versteckten Konstruktoren sind jedoch in einigen Fällen logisch (wahrscheinlich der am weitesten verbreitete Fall).

 

Ja, ich habe mich geirrt. Sie haben nur ein Objekt, das erstellt und nicht gelöscht wird.

Denn wenn Sie den Konstruktor

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

CLASS::Tmp enthält immer noch Müll, nicht die Adresse des Objekts.

 
1) Die Struktur static PTR<CLASS> CLASS::Ptr wird angelegt;
2) Klasse wird erstellt, new CLASS; sie führt den Konstruktor CLASS()aus und CLASS::Ptr wird Null zugewiesen
3) Der CLASS::Tmp-Wert wird durch den Zeiger auf die neue CLASS aktualisiert
4) Löscht die Struktur PTR<CLASS> CLASS::Ptr; führt den Destruktor aus und versucht, CLASS::Ptr zu löschen (es ist Null)
 
Koldun Zloy:

CLASS::Tmp enthält immer noch Müll und keine Objektadresse.

Ich danke Ihnen! Irgendwie habe ich diese Offensichtlichkeit nicht bemerkt.

Sergey Dzyublik:
1) Es wird eine Struktur static PTR<CLASS> CLASS::Ptr angelegt;
2) Erzeugt eine Klasse, new CLASS; führt den Konstruktor CLASS()aus undCLASS::Ptr wird Null zugewiesen
3) Der CLASS::Tmp-Wert wird durch den Zeiger auf die neue CLASS aktualisiert
4) Löscht die Struktur PTR<CLASS> CLASS::Ptr; führt den Destruktor aus und versucht, CLASS::Ptr zu löschen (es ist Null)

Ich danke Ihnen. Aber es ist nicht Null, es ist Müll.

 

Es wäre gut, wenn der Modus

ChartSetInteger( 0,CHART_SHOW,false );

Modus würden keine Pfeile von Geschäften (Eingänge/Ausgänge) angezeigt. Sie werden dort überhaupt nicht gebraucht.

 
Leute, Off-Topic-Frage, ich bin ein Neuling, möchte einen Job bestellen, jetzt habe ich 0 auf meinem Konto, kann ich ein Thema eröffnen? oder muss ich mein Konto am Anfang aufladen? ein wenig verwirrt, wenn sie Geld von meinem Konto blockieren...
 
The service is unavailable.
Ich habe Baldriantinktur geholt...(