指针(3)智能指针总览

来源:互联网 发布:深圳pmp培训机构 知乎 编辑:程序博客网 时间:2024/06/05 05:08
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。
0 0
原创粉丝点击