海口模板建站平台,wordpress前端页面模板,wordpress download_link,中国建筑人才信息网什么是内存泄漏 内存泄漏是指因为疏忽或者错误造成程序对一部分不再使用的内存没有进行释放的情况#xff0c;内存释放不是指内存在物理上的消失#xff0c;而是应用程序分配某段内存时#xff0c;因设计错误#xff0c;失去了对该内存的控制#xff0c;从而造成内存浪费 …什么是内存泄漏 内存泄漏是指因为疏忽或者错误造成程序对一部分不再使用的内存没有进行释放的情况内存释放不是指内存在物理上的消失而是应用程序分配某段内存时因设计错误失去了对该内存的控制从而造成内存浪费 RAII RAII是一种利用对象生命周期来控制程序资源如内存、文件句柄、网络连接、互斥量等等的简单技术。 在对象构造时获取资源接着控制对资源的访问使之在对象的生命周期内始终保持有效最后在对象析构的时候释放资源。借此我们实际上把管理一份资源的责任托管给了一个对象。这种做法有两大好处 不需要显式地释放资源。采用这种方式对象所需的资源在其生命期内始终保持有效。 智能指针的实现就是采用的这种思想
在C98中设计了一个auto_ptr的智能指针但该设计存在缺陷就淘汰了。
auto_ptr
auto_ptr的拷贝本质就是转移指针的管理权 unique_ptr
不支持拷贝构造简单粗暴的解决拷贝带来的悬空问题。 shared_ptr
在unique_ptr的基础上允许拷贝能支持这一操作的本质上shared_ptr内部增加了一个引用计数的思路解决了拷贝问题。 简单实现shared_ptr指针代码 不可以自己拷贝自己为啥 自己拷贝自己shared_ptr会先释放掉自己的资源 sp3不再指向之前的资源释放掉之前的资源后资源被释放导致资源丢失从而指针的内容变为随机值 weak_ptr 不支持RAII不单独管理资源辅助解决shared_ptr的循环引用的问题本质赋值或者拷贝是不增加shared_ptr的引用计数