Warum kann man Autopointer nicht in einen Container packen?
-
Hallo Forum,
Warum kann man Autopointer nicht in einen Container packen?
Das hat irgendwas damit zu tun das man keine Kopien von Autopointern machen. Warum nicht?Vielen Dank
W
-
Waldemar weiß nix schrieb:
Warum kann man Autopointer nicht in einen Container packen?
Wenn du den std::auto_ptr meinst: Dies liegt an seiner Implementierung, die eine Besitzweitergabe beinhaltet. In Kombination mit Kopien und Zuweisungen (die bei den stl-Containern Standard sind), ist dies verheerend.
Der std::auto_ptr wird nicht ohne Grund ersetzt, und es genügend Alternativen (Seien es nun die Pointer-Container von boost, die Smartpointer aus dem TR1 oder von Boost...).
-
Alleine schon die Tatsache, dass eine Const-Referenz auf
std::auto_ptrnicht als Original einer Kopie verwendet werden kann, verunmöglicht die Anwendung in Methoden wiepush_back(const T&)oderinsert(iterator, const T&). Da keine Wertsemantik unterstützt wird, wäre eine Anwendung in STL-Containern auch darüber hinaus sehr heikel, vor allem in Verbindung mit STL-Algorithmen, welche beispielsweise lokale Kopien anlegen, ohne sich dabei viel zu denken.std::auto_ptrhat seine Stärke darin, einzelne Objekte effizient und sicher herumzuschieben, zum Beispiel im Zusammenhang mit Factory-Funktionen. Mitconstkann er zudem als lokaler RAII-Smart-Pointer verwendet werden.