c++相关(类 构造函数和析构函数的经典应用 智能指针 前因)

引入智能指针的原因主要有以下几点:
1、传统的new和malloc可能会忘记释放内存
2、还有时候作为一个函数的返回值不是很明确是否需要自己释放
如下例getName不需要自己释放,getName2需要自己来释放,一般会在外面生成好然后在函数体里只作处理c++相关(类 构造函数和析构函数的经典应用 智能指针 前因)
3、有的时候需要函数中写了释放资源的free或者delete语句但还是有可能出现内存泄露的情况,如下例中badTing()函数中手动写了throw抛出异常则前面new或者malloc的内存空间会全部泄露

c++相关(类 构造函数和析构函数的经典应用 智能指针 前因)

为了防止上面情况的发生可以在构造函数中进行new操作在析构函数中进行delete
c++相关(类 构造函数和析构函数的经典应用 智能指针 前因)
但对某些资源需要很多人一起管理,只有当最后一个使用者不用了才能释放该资源,所以可以进行如下修改:
c++相关(类 构造函数和析构函数的经典应用 智能指针 前因)
但上叙代码只能保证在单线程下的正确,在多线程使用时则会报错。。
到了C++11则引入了智能指针的概念来解决以上问题
c++相关(类 构造函数和析构函数的经典应用 智能指针 前因)