Boost.Python:指针变量的所有权
问题描述:
我将使用Boost.Python的C++树类暴露给python。节点类持有子节点的列表,并提供了一种方法Boost.Python:指针变量的所有权
void add_child(Node *node)
节点类需要提供的节点指针的所有权和删除它的子节点时destuctor被调用。
我露出add_child方法:
.def("addChild", &Node::add_child)
我实际的问题是:我怎么告诉Boost.Python的,节点类在子节点的所有权?
因为如果我在python执行以下代码:
parentNode = Node()
node = Node()
parentNode.addChild(node)
由节点变量引用的对象被在脚本的结束时删除两次。一旦节点变量被删除,第二次当parentNode被删除时。
答
回答我的问题:
我想念那种感觉给了我正确的提示Boost.Python的文档中的常见问题条目:
//The node class should be held by std::auto_ptr
class_<Node, std::auto_ptr<Node> >("Node")
创建的add_child方法薄包装函数:
void node_add_child(Node& n, std::auto_ptr<Node> child) {
n.add_child(child.get());
child.release();
}
完整代码以暴露节点类:
//The node class should be held by std::auto_ptr
class_<Node, std::auto_ptr<Node> >("Node")
//expose the thin wrapper function as node.add_child()
.def("addChild", &node_add_child)
;