【C++】C++11中的智能指针

什么是智能指针

由于程序员在写代码时容易忘记将申请的空间进行释放,或者一些复杂情况下无法正确释放空间,那么就会导致程序奔溃,故需要设计智能指针来帮助我们进行资源的管理。

由于类创建对象会自动调用构造函数,类对象的销毁会调用析构函数,那么借助这个特点,我们创建一个类,在对象创建时获取资源,在对象销毁时释放资源,让资源的获取和销毁都由类来管理,也就是用对象的生命周期来控制资源。

这样的做法有两个好处:
1.不需要显式的释放资源
2.保证资源在整个对象的生命周期内都是有效的

而智能指针具有RAII的特性,智能指针这个类对象在创建时会获取资源,在对象销毁时会释放资源,并且智能指针具有指针的功能,解引用,->,那么在智能指针内部是对解引用和->运算符进行了重载。

auto_ptr

c++98中提供了auto_ptr,其解决浅拷贝的问题是用转移资源管理权限的方式
即当进行拷贝构造时,将当前指针设为NULL,将新的指针指向管理的资源

namespace bit {
   
template<class T>
class auto_ptr {
   
  public:
    auto_ptr(T* ptr)
        : _ptr(ptr)
    {
   }
    auto_ptr(auto_ptr<T>& sp)
        : _ptr(sp._ptr) {
   
// 管理权转移
        sp._ptr = nullptr;
    }
    auto_ptr<T>& operator=(auto_ptr<T>& ap) {
   
// 检测是否为自己给自己赋值
        if (this != &ap) {
   
// 释放当前对象中资源
            if (_ptr)
                delete _ptr;
// 转移ap中资源到当前对象中
            _ptr = ap._ptr;
            ap._ptr = NULL;
        }
        return *this;
    }
    ~auto_ptr() {
   
        if (_ptr) {
   
            cout << "delete:" << _ptr << endl;
            delete _ptr;
        }
    }
// 像指针一样使用
    T& operator*() {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值