Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Destruktor explizit aufrufen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.12.2004, 11:21 Uhr
derphilipder



geht das?
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.12.2004, 11:32 Uhr
virtual
Sexiest Bit alive
(Operator)


Ja. Aber wird nur in seltenen Fällen gemacht. Eigentlich ist das einzige Beispiel, was mir einfällt, ein Allocator.
Zur motivation, warum man das überhaupt machen wollen sollte:

Im allgemeinen ists ja so, daß der Destructor implizit aufgerufen wird, also bei lokalen/automatischen Variablen dann, wenn der Scope verlassen wird, bei dynamischen Variablen, wenn delete aufgerufen wird. Dh im Allgemeinen besteht kein Grund, ihn explizit aufzurufen.

Im speziellen kann es aber solche Situationen geben: zB machen das so container wie zB std::vector so: ein Vector hat eine Kapazität. Die Kapazität gibt an, wie viele Objecte zusätzlich noch in den vektor eingefügt werden können, ohne daß dieser intern vergrößert werden muß. Hat ein Vektor also die Kapazität 10 und enthält 8 Objekte, so hat er noch Platz für 2 weitere. Konkret bedeutet daß, daß für diese beiden weiteren potentiellen Objekte schon Speicher reserviert wurde, aber eben noch kein Konstruktor aufgerufen wurde.

Wird nun ein Objekt eingefügt, so wird (mit Hilfe des sog. inplacement-news) der Konstruktor aufgerufen, ohne daß da extra Speicher belegt wird.

Umgekehrt, wenn ein Objekt entfernt wird, wird nicht etwa der Speicher freigegeben, sondern nur der destructor aufgerufen und der freiwerdende Platz für das nächste Einfügen schon mal warm gehalten.

Prinzipiell kann man sowohl das inplacement new alsauch den manuellen Aufruf des Destruktors per Hand machen, aber die STL stellt wie gesagt einen Allocator zur Verfügung, den man hier benutzen kann und diese Tätigkeiten kapselt.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.12.2004, 11:43 Uhr
derphilipder



Ich frage aus folgender Überlegung:

Wenn ich mit new Speicher für Objekte allokiere, die selber im Konstruktor new benutzen und diesen Speicher im Destruktor wieder freigeben, wird dann, wenn ich für das erste new delete ausführe, der Speicher den diese Objekte reserviert haben auch wieder frei gegeben?

Führt also das Freigeben des Speichers, in dem sich ein Objekt befindet zu einem Destruktoraufruf? So rein intuitiv würde ich sagen nein.

Denkfehler?
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.12.2004, 11:50 Uhr
virtual
Sexiest Bit alive
(Operator)


delete gibt nicht nur Speicher frei, delete ruft auch den Destructor auf.
zB:

C++:
class MyClass
{
char* x;
public:
     MyClass() { x = new[1024]; }
     ~MyClass() { delete[] x; }]
};

...
MyClass* a = new MyClass; // impliziert Constructor aufruf
delete a; // impliziert Destructor aufruf


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.12.2004, 18:37 Uhr
derphilipder



Alles klar, das wollte ich wissen!
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: