1、概述
shared_ptr:强智能指针,可以改变资源的引用计数
weak_ptr:弱智能指针,不会改变资源的引用计数
2、循环引用问题
强智能指针相互循环引用问题,会导致内存泄漏,如下:
解决方法:定义对象的时候使用强智能指针,在引用对象的地方使用弱智能指针
3、底层剖析
智能指针是行为类似于指针的类对象,可以在一些异常的情况下,或是对象过期的时候,自动调用析构函数,从而删除指向的内存。
可以将new获得的地址赋给这种对象,当智能指针过期时,其析构函数将使用delete来释放内存。所以,将new得到的地址赋给智能指针后,将无需考虑内存的释放问题。
shared_ptr可以实现多个指针指向同一对象,发生拷贝也是指向同一内存,可以理解为共享同一块内存。
那么引用计数是如何实现的呢?
指向相同资源的所有shared_ptr共享 引用计数管理区域,并采用原子操作保证该区域的引用计数值被互斥的访问。