ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c-Boost.Python:指针变量的所有权

2019-11-05 19:07:54  阅读:238  来源: 互联网

标签:boost-python boost python c-4


我将使用Boost.Python的C树类公开给python.节点类包含子节点列表并提供一种方法

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

标签:boost-python,boost,python,c-4
来源: https://codeday.me/bug/20191105/1997009.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有