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) |