auto_ptr ist im nächsten C++Standard deprecated



  • Hallo zusammen,

    Ich hab irgendwo gelesen, dass auto_ptr im nächsten C++Standard deprecated ist.
    Stimmt das?
    Wenn ja:
    Was soll man stattdessen denn dann verwenden?
    Nur noch boost::shared_ptr?

    Gruß,
    Marco



  • std::tr1::scoped_ptr
    std::tr1::shared_ptr

    Ich glaube im Standardentwurf ist auch noch ein weiterer drin...


  • Mod

    McMarco schrieb:

    Was soll man stattdessen denn dann verwenden?

    unique_ptr oder move_ptr; ggf. scoped_ptr, wenn man auto_ptr nur verwendet hat, weil es gegenwärtig der einzige Smartpointer der Standardbibliothek ist.

    ein deprecated auto_ptr bedeutet nicht, dass dieser aus dem Standard verschwinden wird - so wenig, wie das etwa mit den C-Headern der Fall ist. Allerdings sollte er bei neuem Code nicht verwendet werden, um bestehenden Problemen mit auto_ptr konsequent aus dem Weg gehen zu können (auto_ptr ist kaputt in dem Sinne, dass er nicht in der Lage ist, Copy-Initialisierung von einem rvalue-auto_ptr auf eine abgeleitet Klasse durchzuführen, zudem sind bestehende Implementierungen verbreiteter Compiler (vc++) z.T. mehr oder minder fehlerhaft und fügen zusätzliche Probleme hinzu).

    Zur Illustration:

    struct Foo {};
    struct Bar : Foo {};
    
    auto_ptr<Bar> bar();
    
    auto_ptr<Foo> p = bar(); // Fehler
    auto_ptr<Foo> q( bar() ); // ok
    


  • Zu welcher Library gehören denn unique_ptr und move_ptr (zur Zeit)?

    Mein Spotlight findet leider keine Datei mit diesem Inhalt 😞
    Ich verwende den GCC. Oder ist der bisher nur in den VC++ headern irgendwo definiert?

    Gruß,
    Marco



  • Na, du mußt dir schon eine TR1-Implementierung besorgen. Entweder von GNU, Dinkumware, Apache Incubator stdcpp oder Boost.

    Und dann halt <memory> inkludieren und den Namespace std::tr1 benutzen.



  • McMarco schrieb:

    Zu welcher Library gehören denn unique_ptr und move_ptr (zur Zeit)?

    Sie sind Teil des Standardentwurfs, und müssen damit noch nirgendwo implementiert sein. Beim GCC könnte es sein, dass sie in einer der kommenden Versionen plötzlich vorhanden sind, beim VC++ ist das sicherlich noch nicht der Fall und wird auch noch ein Weilchen dauern. Derzeit findest Du diese Klassen daher wohl tatsächlich nirgendwo.

    (Nur als Hinweis: Der Standard gibt vor was die Bibliotheken enthalten müssen, die Bibliotheken geben nicht vor was im Standard enthalten sein muss)


Anmelden zum Antworten