智能指针

来源:互联网 发布:php好就业吗 编辑:程序博客网 时间:2024/05/11 05:53
注意:智能指针不是指针,而是模板!
auto_ptr    实现方式:权限转移  坚决不建议使用此模板
scoped_ptr  实现方式:防拷贝,防赋值(将拷贝构造函数和operator=设为私有)
shared_ptr  实现方式:引用计数  但是存在循环引用的问题,可能会造成内存泄漏
解决方案:
1.当剩下最后一个引用的时候,手动释放该对象
2.当对象a的生存周期超过b的时候,将b改为使用一个普通指针指向a
3.配合weak_ptr使用 ,weak_ptr可以生成一个shared_ptr的一个对象,但是weak_ptr是弱引用的,而且它能检测对象是否已经释放,
访问对象时必须通过lock访问,对象的生命周期交给shared_ptr
weak_ptr 的简洁声明如下
namespaceboost {

    template<typenameT>classweak_ptr {
    public:
        template<typenameY>
        weak_ptr(constshared_ptr<Y>& r);

        weak_ptr(constweak_ptr& r);

        ~weak_ptr();

        T* get()const;
        boolexpired() const;    //检测对象是否已经被释放
        shared_ptr<T> lock()const;//用于获取强引用指针
    };
}

原创粉丝点击