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]