scoped_ptr不能被复制,shared_ptr能复制:
使用boost::scoped_ptr的时候必须注意,它不允许进行复制操作,一旦声明了一个指向某内存空间的指针,那么就不可以通过another_p = p;的方式来分配内存空间的新所有权。
auto_ptr不能指定删除器(因而不能管理内存之外的其他资源),shared_ptr能指定删除器
[上述Common Requirements小节摘自Boost文档]
设计哲学:
使用scoped_ptr可以让阅读你代码的程序员知道你的意图--仅仅在当前作用域中使用RAII机制,并且放弃转让所有权。
避免std::auto_ptr在转让所有权语义上的陷阱,同时也让程序员知道此资源不可转让。
常用于Handle/Body(pImpl)惯用法,简化资源管理。
不提供release()成员是为了保证scoped_ptr的所有权不会被转移,防止引起歧义。
key:scoped_ptr比shared_ptr有着更强的暗示,暗示其作用域与对象所有权,更好的帮助其他程序员维护既有代码
scoped_ptr提供了RAII机制,是良好的C++编程风格。
scoped_ptr可以在绝大多数情况下取代std::auto_ptr,而余下的情况则可以使用shared_ptr。
不可以用作STL容器,因为其不支持copy语义。
scoped_ptr非常适合实现pImpl惯用法。
scoped_ptr不可以托管动态分配的数组,请使用scoped_array。
智能指针总览&spm=1001.2101.3001.5002&articleId=35633209&d=1&t=3&u=7337ffa581164aa5b4d89a7d907fcfa2)
2781

被折叠的 条评论
为什么被折叠?



