boost::shared_ptr 可以释放存储的指针而不删除它吗?
我可以看到文档中不存在释放函数,并且在常见问题解答中也解释了为什么它不提供释放函数,例如不能在不唯一的指针上完成释放。我的指点是独一无二的。我怎样才能释放我的指针?
或者使用哪个 boost 智能指针类来允许我释放指针?
我希望你不会说使用 auto_ptr :)
不。 Boost 的常见问题解答条目:
Q。为什么shared_ptr不提供release()函数?
A. 共享指针不能放弃所有权,除非它是 unique(),因为另一个副本仍然会销毁该对象。
考虑:
shared_ptr<int> a(new int);
shared_ptr<int> b(a); // a.use_count() == b.use_count() == 2
int * p = a.release();
// Who owns p now? b will still call delete on it in its destructor.
此外,release() 返回的指针很难可靠地释放,因为源共享指针可能是使用自定义删除器创建的。
因此,如果它是唯一指向您的对象的shared_ptr实例(当unique()返回true时)并且该对象不需要特殊的删除器,那么这是安全的。如果您使用这样的 .release() 函数,我仍然会质疑您的设计。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)