Korrekte Zerstörung von Zeigern auf Objekten

9

Ich würde gerne ein paar kurze Fragen über die ordnungsgemäße Zerstörung von int-Zeigern und Vektorzeigern stellen. Zuerst habe ich Leute gesehen, die in der Vergangenheit über diese Art von Problemen fragten, und fast immer gibt es mehrere Antworten darüber, wie die Verwendung von Vektorzeigern, Zeigern auf Objekten usw. in C ++ nicht gut ist Kopie des Objekts. Das mag wahr sein, aber Sie haben nicht immer die Kontrolle über Paradigmen, die vor Ihrer Ankunft gelegt wurden. Das Paradigma, in dem ich arbeiten muss, erfordert die Initialisierung von Zeigern für fast alles. Ein sehr Java-ähnlicher Ansatz für C ++. Einer der Hauptgründe dafür ist, dass unsere Datensätze so groß sind, dass Stapelzuweisungen Überläufen unterliegen.

Meine Fragen:

Wenn ich einen Zeiger auf ein int32_t-Array habe, was ist der richtige Weg, um es im Destruktor zu zerstören?

Hinweis: Wir setzen im Konstruktor einen beliebigen Zeiger auf NULL.

%Vor%

Ich habe die gleiche Frage über Vektorzeiger:

%Vor%

Vielen Dank im Voraus für einen Rat.

    
Miek 12.12.2012, 17:09
quelle

1 Antwort

13

Alles, was mit new zugewiesen wurde, sollte mit delete aufgehoben werden.

%Vor%

Alles, was mit new [] zugewiesen wurde, sollte mit delete [] aufgehoben werden.

%Vor%

Alles, was in vector dynamisch zugeordnet und gespeichert wird, muss manuell aufgehoben werden:

%Vor%

Wenn Sie aus irgendeinem Grund der Meinung sind, dass es sinnvoll ist, vector dynamisch zuzuordnen, gelten die gleichen Regeln.

%Vor%

Aber ich würde vorschlagen, dass die Gründe für die dynamische Zuweisung eines std::vector sehr gering sind.

In C ++ 11 ist dies am besten mit std::unique_ptr :

möglich %Vor%

Wenn Sie eine Membervariable einer Klasse haben, gelten dieselben Regeln:

%Vor%

Aber selbst dann ist es sinnvoller, sie als std::unique_ptr zu haben. Sie können sie bei Bedarf auch als rohe Zeiger in Schnittstellen behandeln:

%Vor%     
Chad 12.12.2012, 17:15
quelle

Tags und Links