boost::python und pointer?
-
Hallo,
ich will in meiner C++ Anwendung Python scripting aktivieren. Allerdings habe ich bisher nichts zu Pointer gefunden. Wie mache ich z.b. folgende Klasse in Python verfügbar und wie bekomme den Pointer auf das Objekt in C++ zurück?
class Factory { Object* Create(); };Ich verwende boost::python.
Danke im voraus.
-
Hättest du die Möglichkeit, die Factory so zu verändern, daß sie statt eines schlichten Pointers einen
boost::shared_ptrzurückgibt? Damit würdest du dir die Sache um einiges einfacher machen.Das Hauptproblem von "rohen" Pointern im Zusammenhang mit Boost.Python ist, daß du dich selbst um die korrekte Lebensdauer des Objekts kümmern mußt. Boost.Python kann ja nicht wissen, ob der zurückgegebene Pointer auf ein neues oder ein bereits existierendes Objekt zeigt, bzw. ob das Objekt noch irgendwo innerhalb des C++-Codes referenziert wird.
Wenn du statt des
Object*einenboost::shared_ptr<Object>benutzt, mußt du dir über all das praktisch keine Gedanken mehr machen. Boost.Python erzeugt automatisch den richtigen Code, und das Objekt wird dann gelöscht, wenn die letzte Referenz darauf erlischt, egal ob das in C++ oder in Python passiert.