智能指针

Posted hanhuihanhui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智能指针相关的知识,希望对你有一定的参考价值。

上面这个例子就是会出现函数结束了 却忘记了释放内存 产生了内存泄漏

怎么避免这种问题呢 我们就利用函数在终止时 会对栈上的对象进行析构这个特点

产生了智能指针的概念

我们用智能指针来管理分配的资源 当我们函数退出时 智能指针执行自己的析构函数 释放它管理的资源

模板auto_ptr是C++98提供的解决方案,C+11已将将其摒弃,并提供了另外两种解决方案。然而,虽然auto_ptr被摒弃,但它已使用了好多年:同时,如果您的编译器不支持其他两种解决力案,auto_ptr将是唯一的选择。

auto_ptr有什么问题呢

原来的智能指针已经是NULL 不能对ps1进行操作了 所以摒弃auto_ptr的原因是

避免潜在的内存崩溃问题

为了解决这个问题 我们使用 unique_ptr

unique_ptr智能指针之间的 赋值和拷贝构造 都是非法的 eg: ps2 = ps1

 

但是对临时对象的操作确实合法的 eg: ps2 = demo()

程序试图将一个 unique_ptr 赋值给另一个时,如果源 unique_ptr 是个临时右值,编译器允许这么做;如果源 unique_ptr 将存在一段时间,编译器将禁止这么做

 

 

智能指针的选择

需要多个指针指向同一对象的时候 选择shared_ptr

如果不需要时 选择 unique_ptr 也可以使用 auto_ptr

如果没有 unique_ptr 可以使用boost库里的 scoped_ptr

以上是关于智能指针的主要内容,如果未能解决你的问题,请参考以下文章

C++编程经验:智能指针 -- 裸指针管得了的我要管,裸指针管不了的我更要管!

C++编程经验:智能指针 -- 裸指针管得了的我要管,裸指针管不了的我更要管!

Qt 智能指针学习(7种QT智能指针和4种std智能指针)

智能指针 与 oc中的指针

C11新特性之智能指针

C++|深入理解智能指针