Probleme mit dem auto_ptr



  • Hallo!

    Wieso geht folgende zuweisung nicht (fett und kursiv markiert):

    [cpp]
    #include <memory>
    #include <iostream>
    using namespace std;

    class Bla
    {
    public:
    int a;

    };

    int main()
    {
    auto_ptr<Bla> ptr; //(new Bla); geht

    ptr = new Bla();

    cout<<ptr->a<<endl;

    cin.get();
    return(0);
    }
    [/cpp]

    Wie kann ich einem auto_ptr einen Pointer Zuweisen? Ich habe eine Map die Pointer enthält und da mir das ewige delete auf die nerven geht und unübersichtlich ist wollte ich eben auto_ptr nehmen.



  • hmmm123 schrieb:

    Wie kann ich einem auto_ptr einen Pointer Zuweisen?

    Mit ptr.reset(lalala); oder ptr = std::auto_ptr<bla>(lala);

    hmmm123 schrieb:

    Ich habe eine Map die Pointer enthält und da mir das ewige delete auf die nerven geht und unübersichtlich ist wollte ich eben auto_ptr nehmen.

    Standardcontainer mit auto_ptr zu füllen ist verboten, da sich ein auto_ptr vollkommen anders verhält, als es std::map verlangt. Schau mal in die FAQ, da steht sicher noch mehr dazu.



  • Da auto_ptr<> verhindert, das es zwei "Besitzer" des Objektes gibt, dürfte es etwas schwierig werden auto_ptr<> in Containern zu verwenden. 😃

    Du solltest dir deshalb den smart_ptr aus der boost-Library anschauen. Den kannst du dafür verwenden. Mit dem smart_ptr mußt du dich nicht um delete kümmern und es kann auch mehrere Besitzer geben.

    http://www.boost.org/libs/smart_ptr/smart_ptr.htm


Anmelden zum Antworten