我想知道动态分配 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/