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) 
;