C++智能指针(一)智能指针的简单介绍

C++智能指针
在正式了解智能指针前先看一下下面的一段代码

#include<iostream>
using namespace std;
class A
{
public:
    A()
        :_ptr(NULL), _a(0)
    {}
    ~A()
    {}
public:
    int* _ptr;
    int _a;
};

void test()
{
    A a;
    int *p1 = new int(2);
}
int main()
{
    test();
    system("pause");
    return 0;
}

这个代码仅从编译运行是的角度是没有问题的,但是细心看很明显这段代码是不负责任的,因为它存在内存泄漏。只是释放了_ptr,但是p1压根没释放。在这里看起来内存泄漏没有对结果造成什么,但是千万不要小瞧内存泄漏,这是个很严重的问题。如果一个特别大的项目中存在很多很多的内存泄漏问题,一开始可能没有什么问题,但是过一段时间服务器可能会挂掉,这就是内存泄漏导致内存不够用产生的。
为了解决这些问题,可以采用下面这种方法。

#include<iostream>
using namespace std;
void fun()
{
    throw 2;
}
int main()
{
    try{
        fun();
    }
    catch (int e)
    {
        cout << e << endl;
    }
    system("pause");
    return 0;
}

异常对象在传给对应的catch处理后撤销。这样做是可以的,但是如果代码中有比较多的异常,这样显然不合适,大量的try catch会影响代码逻辑,导致代码丑陋不堪。为了解决这个问题,引入了智能指针。
说到智能指针,必须知道RAII
RAII:资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。智能指针只是RAII的一种应用。
智能指针:所谓智能指针就是智能/自动化的管理指针所指向的动态资源的释放。
智能指针的发展可分为三个部分,
1.auto_ptr 管理权的转移–带有缺陷的设计–c++98/03
2.scoped_ptr(boost) unique_ptr(c++11) 防拷贝 –简单粗暴的设计 –功能不全
3.shared_ptr(boost/c++11) 引用计数 –功能强大(支持拷贝,支持定制删除器) 缺陷–循环引用(可采用weak_ptr配合解决)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值