智能指针

本文介绍了智能指针的概念及其几种实现方式:auto_ptr、scoped_ptr、shared_ptr和weak_ptr。重点探讨了shared_ptr的引用计数机制及可能引起的循环引用问题,并提出了相应的解决方案。
注意:智能指针不是指针,而是模板!
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 的简洁声明如下
namespace boost {

    template<typename T>class weak_ptr {
    public:
        template <typename Y>
        weak_ptr(const shared_ptr<Y>& r);

        weak_ptr(const weak_ptr& r);

        ~weak_ptr();

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值