1

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

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

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

谢谢!

4

1 回答 1

2

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 指针生命周期的单独引用计数。

于 2012-11-17T20:10:16.293 回答