C ++ Wie lösche ich eine Struktur?

8

Struktur, die ich erstellt habe:

%Vor%

Wie jetzt jetzt löschen?

    
Rella 09.11.2010, 13:47
quelle

11 Antworten

20
%Vor%

Dadurch wird kein Speicher freigegeben, den Sie newVideoSample->buffer zugewiesen haben - Sie müssen ihn vor dem Löschen explizit freigeben.

%Vor%

Normalerweise wird diese Art der Freigabe in den Destruktor der Klasse geschrieben, so dass dies der Fall ist wird automatisch aufgerufen, wenn Sie delete auf das dynamisch erstellte Objekt anwenden.

Danke @steve dafür, es zu erwähnen:)

    
Amarghosh 09.11.2010, 13:49
quelle
7
%Vor%

Aber wenn sich die new und delete im selben Kontext befinden, ist es wahrscheinlich besser, sie zu überspringen und sie stattdessen nur auf dem Stapel zu erstellen:

%Vor%

In diesem Fall ist keine Bereinigung notwendig.

    
aschepler 09.11.2010 13:49
quelle
3

Sie suchen nach dem delete Schlüsselwort:

%Vor%     
SLaks 09.11.2010 13:49
quelle
3

delete newVideoSample;

Verwenden Sie jedoch einen intelligenten Zeiger , der den Speicher automatisch freigibt, zum Beispiel:

%Vor%     
vitaut 09.11.2010 13:50
quelle
2

Wenn ich etwas nicht verpasse, verwenden Sie einfach delete :

%Vor%     
Justin Niessner 09.11.2010 13:49
quelle
2

delete newVideoSample . In C ++ ist struct identisch mit class , aber mit öffentlichen Standardfeldern.

    
Abyx 09.11.2010 13:50
quelle
2

Verwenden Sie delete

%Vor%

Es gibt auch eine Überladung , dh delete[]

%Vor%

In Modern C ++ wird immer empfohlen, Smart Pointer zu verwenden. Sie können boost::shared_ptr<T> aus der Boost-Bibliothek verwenden.

    
Prasoon Saurav 09.11.2010 13:51
quelle
2

Wenn Sie möchten, dass VideoSample das buffer -Member freigibt, ist VideoSample eine fragile Klasse. Es kann nicht festgestellt werden, ob buf im Heap mit new[] oder malloc erstellt wurde oder ob es sich um die Adresse einer Variablen auf dem Stapel handelt.

    
dripfeed 09.11.2010 17:51
quelle
2

In C ++ ist eine Struktur genau das Gleiche wie eine Klasse, außer dass alles standardmäßig public ist, wobei eine Klasse standardmäßig privat ist. Eine Struktur kann also einen Destruktor haben und wird mit delete freigegeben.

    
robev 09.11.2010 17:58
quelle
1

Zuzuordnen - & gt;     VideoSample * newVideoSample = neues VideoSample;

Löschen - & gt;     lösche newVideoSample;

Wenn Sie das Objekt im selben Kontext löschen, ordnen Sie es besser auf dem Stapel zu. Wenn Sie es außerhalb des Kontextes löschen, vergessen Sie nicht, eine Referenz zu übergeben.

Und am wichtigsten, nicht löschen, wenn Ihr Prozess beendet wird, ist es sinnlos: P

    
djTeller 09.11.2010 13:57
quelle
0

* * Sie erstellen ein Objekt von Videosample, also verwenden Sie einfach delete ..

VideoSample * newVideoSample = neues VideoSample;    lösche newVideoSample; * *

    
Satyam 05.07.2012 05:57
quelle

Tags und Links