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_ptr nicht als Original einer Kopie verwendet werden kann, verunmöglicht die Anwendung in Methoden wie push_back(const T&) oder insert(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_ptr hat seine Stärke darin, einzelne Objekte effizient und sicher herumzuschieben, zum Beispiel im Zusammenhang mit Factory-Funktionen. Mit const kann er zudem als lokaler RAII-Smart-Pointer verwendet werden.


Anmelden zum Antworten