boost scoped_ptr<>



  • hi

    int a = 10;
    boost::scoped_ptr<int> ptrVar;
    ptrVar = &a;
    

    warum geht das nicht? ptrVar ist doch nur ein template-zeiger, von daher sollte man dem zeiger doch einfach per referenz die addresse geben können.

    noch was:

    boost::scoped_ptr<int> ptrVar;
    *ptrVar = 10;
    

    warum kann man hier nicht einfach den pointer dereferenzieren und ihm einen wert zuweisen?

    vielen dank im vorraus



  • Du solltest keine Stackvariablen wie a an einen Smart-Pointer binden, da dieser dann versucht, den Speicher mit delete freizugeben.

    Zudem hat boost::scoped_ptr eine Methode reset() , mit der du neue Zeiger zuweisen kannst. Dadurch, dass der Zuweisungsoperator nicht direkt angeboten wird, sollen Fehler durch implizite Konvertierungen eingedämmt werden (das gleiche beim Konstruktor).

    Zu deiner zweiten Frage: Sag doch bitte, was nicht geht (Fehlermeldung oder ähnliches).



  • ich danke dir erstmal.

    Nexus schrieb:

    Zu deiner zweiten Frage: Sag doch bitte, was nicht geht (Fehlermeldung oder ähnliches).

    klar, mein fehler:

    This application has requested the Runtime, to terminate it an unusual way.
    


  • Ah klar. Dass ich das nicht gesehen habe... 🙄

    Du hast gar keinen Speicher reserviert.

    boost::scoped_ptr<int> ptrVar(new int);
    *ptrVar = 10;
    

    Oder:

    boost::scoped_ptr<int> ptrVar;
    ptrVar.reset(new int);
    *ptrVar = 10;
    

    Oder direkt:

    boost::scoped_ptr<int> ptrVar(new int(10));
    


  • alter, danke.


Anmelden zum Antworten