Initialisierung von Pointer (new) funktioniert bei shared_ptr nicht mehr



  • Ich möchte zum ersten Mal eine der Pointer Strukturen nutzen. In diesem Fall shared_ptr weil der Pointer herumgereicht wird.

    Das ganze sieht so aus: (in Wirklichkeit in .h und .cpp Dateien)

    boost::shared_ptr<PhaseObject> PhaseGratingCouplerObject;
    PhaseGratingCouplerObject = new PhaseObject;
    

    liefert mir aber nur diese Fehlermeldung:

    1>.\src\DialogGratingPeriodVariation.cpp(259) : error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'PhaseObject *' akzeptiert (oder keine geeignete Konvertierung möglich)
    1> E:\Daten\Dev\SVN\hibiscus\Cpp\AdvancedBeamShaping\QBeamShaping\include\boost/shared_ptr.hpp(527): kann 'boost::shared_ptr<T> &boost::shared_ptr<T>::operator =(const boost::shared_ptr<T> &)' sein
    1> with
    1> [
    1> T=PhaseObject
    1> ]
    1> bei Anpassung der Argumentliste '(boost::shared_ptr<T>, PhaseObject *)'
    1> with
    1> [
    1> T=PhaseObject
    1> ]

    Was soll mir das sagen? Das man bei Nutzung von 'shared_ptr' keine Pointer mehr erzeugen darf? Die benötigte Syntax erschliest sich mir so nicht.

    Matthias



  • Hast du einmal in die Boost-Doku geschaut? Bestimmt nicht!
    http://www.boost.org/doc/libs/1_37_0/libs/smart_ptr/shared_ptr.htm#BestPractices



  • Ich bin inzwischen darauf gekommen das es wohl so lauten sollte:

    PhaseGratingCouplerObject.reset(new PhaseObject);
    

    aber ich habe die Nutzung von Smart Pointern erstmal verworfen, weil ich ja nirgendswo einen Pointer mehr uebergeben kann, wenn die Variable ueber eine Smart Pointer definiert wurd. Mein Programm komplett umzuschreiben ist mir erstmal zu aufwendig...



  • pospiech schrieb:

    aber ich habe die Nutzung von Smart Pointern erstmal verworfen, weil ich ja nirgendswo einen Pointer mehr uebergeben kann, wenn die Variable ueber eine Smart Pointer definiert wurd.

    Häh? Was ist den Bitte mit:

    PhaseGratingCouplerObject.get();
    

    Das den nativen Zeiger liefert?



  • Na, er hat ja auch die Doku nicht gelesen. Wie soll er das get() kennen? 🙄


Log in to reply