目录
RAII思想
智能指针原理
内存泄露与智能指针
个人主页:东洛的克莱斯韦克-CSDN博客
RAII思想
RAII——用对象的生命周期控制程序资源
一个类有构造函数和析构函数,这两个函数在对象生命的开始和结束自动调用。通过构造函数接管特定的资源,在通过析构函数释放对应的资源。
我们实际上把管理一份资源的责任托管给了一个对象。这种做 法有两大好处:
1.不需要显式地释放资源。
2.采用这种方式,对象所需的资源在其生命期内始终保持有效。
用RAII思想设计一个类
template<class T>
class SmartPtr {
public:SmartPtr(T* ptr = nullptr): _ptr(ptr){}~SmartPtr(){if(_ptr)delete _ptr;}private:T* _ptr;
};
智能指针原理
RAII是智能指针的基石,在RAII思想的设计上,重载* -> 等操作符,是该类实例化出的对象可以像指针一样使用。
template<class T>
class SmartPtr {
public:
SmartPtr(T* ptr = nullptr): _ptr(ptr){}
~SmartPtr(){if(_ptr)delete _ptr;}
T& operator*() {return *_ptr;}
T* operator->() {return _ptr;}
private:
T* _ptr;
};
内存泄露与智能指针
什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内 存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对 该段内存的控制,因而造成了内存的浪费。
内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现 内存泄漏会导致响应越来越慢,最终卡死。
当我们new出一块空间时,如果用普通指针管理该空间的生命周期,难免会有内存泄露的风险。我们可以用一些内存泄露检测的工具或插件规避风险。也可以用智能指针接管资源,让对象的生命周期和资源的生命周期挂钩。