2010-12-01 13 views

Antwort

8

Nein, Sie brauchen nur delete, das mit new zugewiesen wurde. Einfache Werttypen wie int s müssen nie gelöscht werden.

Wenn Ihre Klasse hat Daten enthalten dynamisch zugewiesen new entweder durch den Hersteller oder später durch ein anderes Verfahren sollte der destructor typischerweise alle es de-zuteilen, unabhängig davon, ob die Daten öffentlich oder privat.

Ich könnte hinzufügen, dass die öffentlich sichtbaren dynamisch zugewiesenen Zeigerelemente möglicherweise nicht das beste Design ist.

+0

+1 Letzter Punkt ist umstritten, aber das ist natürlich nicht der Post, um darauf einzugehen. –

2

Sie können nur Ints-Zeiger löschen.

Ihr Destruktor wird Zugriff auf private Mitglieder haben, aber ja, es könnte sie löschen, wenn sie tatsächlich Zeiger waren (sowie die öffentlichen).

Nur weil ein Mitglied Ihrer Klasse ein Zeiger ist, heißt das nicht, dass Ihr Destruktor dazu bestimmt ist, es zu löschen. C++ hat ein Konzept von "Besitz". Der Besitzer ist normalerweise, aber nicht immer derselbe wie der Schöpfer (wo neu genannt wurde).

Beachten Sie, dass Sie für Arrays, in denen Sie das neue T [x] verwenden, delete [] verwenden müssen.

Es gibt automatische Objekte, die für Sie Löschen aufrufen. Diese werden als intelligente Zeiger bezeichnet, und Sie sollten sie die meiste Zeit verwenden, anstatt das Löschen manuell durchzuführen.

Ein Destruktor kann andere Dinge tun als nur Zeiger zu löschen. Wenn sich Ihre Klasse beispielsweise bei der Erstellung an eine Art Diagramm gebunden hat, kann sich Ihr Destruktor automatisch aus diesem Diagramm entfernen.

2

delete ist nur für Zeiger gedacht. Im Allgemeinen sollten Sie alle öffentlichen und privaten Variablen löschen, für die Sie einen eigenen Speicher besitzen (Sie haben dies in Ihrer Klasse reserviert und Sie müssen diese löschen).

0

Nein, löschen Sie einfach einige Zeiger, die in Ihrer Klasse konstruiert sind.

Verwandte Themen