您的位置:首页 > 健康 > 养生 > 【C++】RAII思想与智能指针原理——有效避免内存泄露问题

【C++】RAII思想与智能指针原理——有效避免内存泄露问题

2024/10/6 16:18:28 来源:https://blog.csdn.net/2301_79796701/article/details/141723535  浏览:    关键词:【C++】RAII思想与智能指针原理——有效避免内存泄露问题

目录

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出一块空间时,如果用普通指针管理该空间的生命周期,难免会有内存泄露的风险。我们可以用一些内存泄露检测的工具或插件规避风险。也可以用智能指针接管资源,让对象的生命周期和资源的生命周期挂钩。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com