gpt4 book ai didi

c++ - boost .Python : Ownership of pointer variables

转载 作者:太空狗 更新时间:2023-10-29 21:08:00 26 4
gpt4 key购买 nike

我正在使用 Boost.Python 向 python 公开一个 C++ 树类。节点类持有子节点列表并提供方法

void add_child(Node *node)

Node 类获取提供的 Node 指针的所有权,并在调用析构函数时删除它的子节点。

我将 add_child 方法公开为:

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

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

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

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

节点变量引用的对象在脚本末尾被删除了两次。一次是节点变量被删除,第二次是父节点被删除。

最佳答案

回答我自己的问题:

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

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

关于c++ - boost .Python : Ownership of pointer variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4112561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com