c++ - python::boost::对象分配

标签 c++ python pointers boost

我想知道动态分配 boost::python::object 类型的对象是否正确。

boost::python::object * obj = new boost::python::object();

会不会有什么问题?内部引用计数呢?

谢谢!

最佳答案

docs对于 boost::python::object 明确声明析构函数递减引用计数,而赋值运算符递增它。虽然没有明确说明,但从这些显式语句和关于构造函数 Constructs an object managing a reference 的语句中,我们可以推断构造函数也增加了引用计数。

由于new调用的是构造函数,所以只要在指针上调用delete保证析构函数被调用,内部引用计数不会有任何问题。

另请注意,关于使用 std::shared_ptr 或 std::unique_ptr 进行引用计数的注释有些误导。 std::unique_ptr 不引用计数而是移动/移动分配导致所有权从实例 A 传递到实例 B 并且实例 A 变为无效。此外,std::shared_ptr 不会修改 boost::python::object 维护的内部引用计数,而是管理一个关于 boost::python::object 指针生命周期的单独引用计数。

关于c++ - python::boost::对象分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13426454/

相关文章:

python - 如何将多维数组传递给 pyopencl.algorithm.copy_if() -- PyOpenCL,

python - 通过 Numpy 中的张量乘法进行对角 block 乘法

c - 我必须为 NULL 指针进行 malloc 吗?我什么时候需要为指针进行 malloc?

c++ - 地址在多个指针中不连续

Python 无法导入 (cython) 共享库

c++ - 如何在 C/C++ 中读取未知维度的数据文件

c++ - 如何确定 lib "references"是哪个 dll?

c++ - Qt/SQL - 从 QSqlQuery exec 存储过程获取列类型和名称?

python - 多索引 DataFrame - 利用其他行添加一行

c - 如何在C中打印结构体数组的所有值