首页 > 试题广场 >

请你介绍一下C++中的智能指针

[问答题]

请你介绍一下C++中的智能指针

智能指针是C++11 引入的,用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。包含在头文件<memory>中,其中包括:

(1)shared_ptr:它采用引用计数的方法,记录当前内存资源被多少个智能指针引用,该引用计数的内存在堆上分配。每新增一个引用计数加1,当过期时引用计数减1。只有引用计数为0时,智能指针才会自动释放引用的内存资源。shared_ptr的一个最大的陷阱是循环引用,会导致堆内存无法正确释放,从而导致内存泄漏。

(2)weak_ptr:为了解决循环引用导致的内存泄漏,引入了weak_ptr弱指针,weak_ptr的构造函数不会修改引用计数的值,从而不会对对象的内存进行管理,其类似一个普通指针,虽然不指向引用计数的共享内存,但是可以检测所管理的对象是否已经被释放,从而避免非法访问。

(3)unique_ptr:一种对资源具有独占性的智能指针,即一个对象资源只能同时被一个unique_ptr指向。

发表于 2019-06-28 18:50:56 回复(0)
<p>智能指针用于堆内存的管理,将普通指针变量封装成一个栈上的变量。较为常用的是share_ptr,它使用的是引用计数机制,当引用数归零时才会回收空间。智能指针不可通过赋值运算符获得普通指针,但可以通过构造函数,get,,make_share等方式获取</p>
发表于 2020-07-23 08:08:09 回复(0)