可能的重复:
如何从 boost::shared_ptr 释放指针? https://stackoverflow.com/questions/1525764/how-to-release-pointer-from-boostshared-ptr
我的接口的函数返回一个指向对象的指针。用户应该拥有该对象的所有权。我不想返回 Boost.shared_ptr,因为我不想强迫客户端使用 boost。然而,在内部,我想将指针存储在shared_ptr中,以防止出现异常等情况下的内存泄漏。似乎没有办法将指针与共享指针分离。这里有什么想法吗?
您正在寻找的是release
功能;shared_ptr
没有释放功能。根据 Boost 手册 http://www.boost.org/doc/libs/1_41_0/libs/smart_ptr/shared_ptr.htm:
问:为什么shared_ptr不提供release()函数?
答:shared_ptr 不能放弃所有权,除非它是 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() 返回的指针很难可靠地释放,因为源共享指针可能是使用自定义删除器创建的。
您可以考虑两种选择:
- 你可以使用
std::tr1::shared_ptr
,这将要求您的用户使用支持 TR1 的 C++ 库实现or使用升压;至少这会让他们在两者之间做出选择。
- 你可以实现你自己的
boost::shared_ptr
-类似共享指针并在外部接口上使用它。
您还可以查看有关此问题的讨论在库的公共接口中使用 boost::shared_ptr https://stackoverflow.com/questions/335330/using-boostsharedptr-in-a-librarys-public-interface.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)