Boost.Pythonを使用してC++ツリークラスをPythonに公開しています。ノードクラスは子ノードのリストを保持し、メソッドを提供します
void add_child(Node *node)
Nodeクラスは、提供されたNodeポインターの所有権を取得し、デストラクタが呼び出されたときにその子ノードを削除します。
add_childメソッドを次のように公開しています。
.def("addChild", &Node::add_child)
私の実際の質問は、Nodeクラスが子ノードの所有権を取得することをBoost.Pythonにどのように伝えるのですか?
Pythonで次のコードを実行すると:
parentNode = Node()
node = Node()
parentNode.addChild(node)
ノード変数によって参照されるオブジェクトは、スクリプトの最後に2回削除されます。1回目はノード変数が削除され、2回目はparentNodeが削除されます。