代码之家  ›  专栏  ›  技术社区  ›  Kai

Python:指针变量的所有权

  •  3
  • Kai  · 技术社区  · 15 年前

    void add_child(Node *node)
    

    Node类取得所提供节点指针的所有权,并在调用destructor时删除其子节点。

    我将add_child方法公开为:

    .def("addChild", &Node::add_child)
    

    我的实际问题是:如何告诉Boost.Python Node类拥有子节点的所有权?

    因为如果我用python执行以下代码:

    parentNode = Node()
    node = Node()
    parentNode.addChild(node)
    

    1 回复  |  直到 15 年前
        1
  •  4
  •   Kai    15 年前

    回答我自己的问题:

    我错过了Boost.Python文档中的一个FAQ条目,它给了我正确的提示:

    //The node class should be held by std::auto_ptr
    class_<Node, std::auto_ptr<Node> >("Node")
    

    为add_子方法创建瘦包装函数:

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