2016-09-25 4 views
0

Ich las this Post und ich wollte klären, muss ich explizit Membervariablen eines Objekts löschen, das dynamisch erstellt wurde?C++ Destruktor für Member-Variablen?

Zum Beispiel habe ich eine Klasse mit zwei Membervariablen,

class pointCloud 
{ 
public: 
    pointCloud(); 
    void addPoint(int); 
    point getPoint(int); 

private: 
    int id; 
    std::vector<point> pointArray; 

}; 

und dann erstelle ich eine dynamische Instanz davon in Haupt ...

int main() 
{ 

    pointCloud* cloud = new pointCloud; 
    cloud->addPoint(8); 

    delete cloud; 
} 

Mein Verständnis ist, dass, wenn delete cloud; wird aufgerufen, die Variablen 'id' und 'pointArray' werden automatisch aus dem Speicher gelöscht/freigegeben. Ist das richtig? Oder muss ich einen Destruktor schreiben, um diese Membervariablen explizit zu löschen?

+0

ja, rechts .. Destruktor ist für die Freigabe dynamisch zugewiesenen Speicher benötigt – SimpleGuy

Antwort

1

Oder muss ich einen Destruktor schreiben, um diese Membervariablen explizit zu löschen?

In Ihrem Fall keine Notwendigkeit zu schreiben, weil id ein primitiver Typ ist, ist pointArray ein Vektor, der bereits destructor hat die Speicher frei wird.

Wenn Sie jedoch rohe Zeiger verwenden (Puffer über new [] zuweisen), müssen Sie im Destruktor den Speicher manuell freigeben (delete []).

1

Sie brauchen nicht die Elementvariablen löschen - aber Sie müssen den Inhalt des pointArray delete, wenn Sie es erstellt (mit new)

Im Allgemeinen, was auch immer Sie (irgendwo) erstellen mit new, Sie müssen delete auch (irgendwo); Es ist dein Problem, das aussortiert zu bekommen.
Hier: Sie haben pointCloud erstellt, und Sie haben es gelöscht. Das ist gut so.