智能指针auto_ptr、内存泄漏解决

原创 2016年08月29日 20:02:14

在C++11中,已经不使用auto_ptr,而用 unique_ptr进行替代,不过二者原理都差不多。头文件:memory

智能指针:实质上是一个类,在创建智能指针的时候,本质上是在栈上创建了一个对象,而析构函数总是会在出栈时被调用,清理会自动进行。unique_ptr(auto_ptr)通过在栈上构建一个对象a,对象a中动态分配内存指针p,所有对指针p的操作都转为对对象a的操作。而在a的析构函数中会自动释放p的空间,而该析构函数是编译器自动调用的,无需程序员操心。
unique_ptr(auto_ptr):都是唯一指针,且只能智能指针都要直接初始化,但unique_ptr(auto_ptr)不能像shared_ptr那样共享,对于指针不能复制,只能转移其控制权,利用release()和reset()函数,转移之后,原来的指针就失效了。

内存泄漏定义
1、new了一个空间,但没有delete;
2、动态内存不存在作用域的问题,但保存其地址的指针变量是受作用域影响的,指针一般是局部变量,在函数内部new以后没有释放,
那么该区域的内存将始终不能为其他数据所使用,而指向该内存的指针是个局部变量,当定义该指针的函数结束并且返回时,指针也就消失了,我们就再也找不到该块中的内存区域,指向该内存区域的指针自动消失了。 计算机就再也找不到该区域的内存了,就好像是丢失了这块内存一样,这种情况被称之为内存泄漏。

优点:
解决内存泄漏问题,智能指针在出栈时,都会自动释放指针,而不用像使用普通指针那样要考虑因为异常等原因没有delete掉。

使用注意:
1、应绝对避免把auto_ptr放到容器中,(unique_ptr)auto_ptr拷贝赋值时是所有权转移,而在容器中可能会产生临时对象拷贝赋值,临时对象获得所有权之后就析构了释放了对象。并且很难避免STL内部对容器中的元素实现赋值,这样便会使容器中多个元素被置位NULL。

vector<auto_ptr<MyClass>>m_example//绝不能这样做

2、auto_ptr的析构函数调用的是delete不是delete [],所以不能使用智能指针数组。

3、避免unique_ptr(auto_ptr)之间的赋值。

4、当将unique_ptr(auto_ptr)作为函数参数时,最好声明为const auto_ptr&引用,避免所有权转移,当函数返回值可以简单的传值。

版权声明:本文为博主原创文章,未经博主允许不得转载。

使用auto_ptr来自动释放内存

标准的STL模板库中,有一个auto_ptr模板类,它能够自动释放用new分配的内存。对于在局部变量中内存的分配和释放,能够得到有效的处理,避免了内存泄漏。请看下面的演示代码:#include #in...

C++ auto_ptr智能指针的用法

C++ auto_ptr智能指针的用法

浅谈C++普通指针和智能指针管理动态内存的陷阱

前言: C++中动态内存的管理主要是使用new/delete表达式和std::allcator类。 为了管理动态内存更加安全,C++11新标准库推出了智能指针。这里只讨论使用他们在使...

“拥抱”异常,还是,“固守”返回值?

我想,作者对于异常的性能可能有一些误会。对于 Java 或 C# 这样的语言,异常的成本无论高低,都是不可回避的,不谈了。对于 C++ 来说,未发生的异常,其成本极其微小,大体上,只是多一个地址入栈的...

智能指针(上)-----动态管理内存问题,auto_ptr的模拟实现

今天我们来详解C++中一个重要的知识点——智能指针。文章主要以下面几点来展开: 智能指针定义及动态内存的管理 智能指针作用 auto_ptr的模拟实现 智能指针定义 智能指针简单理解就是智能的指针,...
  • Pg_dog
  • Pg_dog
  • 2017年04月13日 09:22
  • 611

浅谈auto_ptr智能指针

在c++标准库里主要有三个智能指针: ①auto_ptr 在任何情况下都不要使用 ②scoped_ptr 独占空间,防拷贝和赋值,是对第①个智能指针的缺陷所作出的解决 ③shared_ptr 利用...

智能指针从auto_ptr说起

从何说起,从”auto_ptr”说起 那还是在上大学的时候,看了《C++标准程序库:自修教程与参考手册》,看到auto_ptr这个东西;哎呦,不错,是个好东西,然后看了看;还记得,参加亚信联创的招聘...

auto_ptr-----智能指针

void FunTest() { int *p = new int[10]; FILE* fp = fopen("1.txt","rb"); if(fp==NULL) ...

C++智能指针(auto_ptr)详解 (转载)

智能指针(auto_ptr) 这个名字听起来很酷是不是?其实auto_ptr 只是C++标准库提供的一个类模板,它与传统的new/delete控制内存相比有一定优势,但也有其局限。本文总结的8个问题...
  • xamhaha
  • xamhaha
  • 2017年04月23日 20:34
  • 116

c++ 模板学习笔记:类模板模拟auto_ptr智能指针(权哥)

之前转载了一篇文章:auto_ptr详解>> 地址:http://blog.csdn.net/shawvichan/article/details/16959475 为了帮助理解其工作原理,此处自...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:智能指针auto_ptr、内存泄漏解决
举报原因:
原因补充:

(最多只允许输入30个字)