STL - deque

Hallo Leute,

auf dieser Hilfe-Seite:

http://www.cplusplus.com/reference/stl/deque/clear.html

findet sich diese Formulierung:
„their destructors are called“

Was macht denn nun die deque, wenn ich mal Zeiger rein stecke? Ist die dann so helle, dass sie den Destruktor von " *Zeiger " aufruft?

Ist die deque überhaupt für Zeiger geeignet, oder gibt es andere Container, die eher Kandidaten sind für diesen Zweck?

lg
Martin B

Beim Hinzufügen eines Elements zu nem STL container wird Speicher für das Element angelegt und dann der Copy-Konstruktor aufgerufen.
Beim Entfernen wird entsprechend der Destruktor aufgerufen und der Speicher wieder freigegeben. Wie das genau implementiert ist, und ob sich der container einen Speicherpuffer hält ist dabei für den Anwender unwichtig.

Bei primitiven Elementen (wie zB ‚int‘ oder pointer), passiert prinzipiell dasselbe, mit dem Unterschied: aus Copy-Konstruktor wird eine normale Zuweisung, aus Destruktor wird eine no-op.

Sind deine Elemente Zeiger, dann musst du dich selbst um die entsprechende Konstruktion (new) und Destruktion (delete) kümmern, sprich: new, dequeue.insert, deqeue.erase, delete
Alternativ kannst du statt Zeiger auch std::auto_ptr benutzten, die übernehmen dann die Destruktion für dich.

Ob dequeue für Zeiger geeignet ist, das ist falsch gefragt. Alle STL container verhalten sich hier prinzipiell gleich. Wichtiger ist, ob dequeue für deinen Anwendungsfall geeigenet ist. Die Art des Lese- und Schreibzugriffs entscheidet normalerweise über den zu verwendenden Containers.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Markus,

danke für Deine Tips, das ist sehr gut erklärt!

Alternativ kannst du statt Zeiger auch std::auto_ptr
benutzten, die übernehmen dann die Destruktion für dich.

Ah, jetzt weiss ich endlich, wofür die gut sind, :smile:

danke, ciao
Martin B