C++11智能指针 shared_ptr,unique_ptr和weak_ptr的理解

简要描述
shared_ptr 允许多个指针指向同一个对象
unique_ptr 独占所指向的对象
weak_ptr shared_ptr的弱引用
shared_ptr描述(in memory):
shared_ptr是一个标准的共享所有权的智能指针,就是允许多个指针指向同一对象,shared_ptr对象中不仅有一个指针指向某某(比如 int型,以下也拿int类型举例)对象,还拥有一个引用计数器,代表一共有多少指针指向了那个对象。

每当创建一个shared_ptr的对象指向int型数据,则引用计数器值+1,每当销毁一个shared_ptr对象,则-1.当引用计数器数据为0时,shared_ptr的析构函数会销毁int型对象,并释放它占用的内存。
重点:shared_ptr p (new int(22));int *q = p.get();//语义没问题
{
shared_ptr (q);//意味着q被绑定,!!!!引用计数器还是1!!!!//如果这个被执行,程序块结束以后q和q所指的内容被销毁,则代表着以后执行(*p)的解引用操作,就成了未定义的了。
}
int r = *p;//已经不对了,因为p指向的内存已经在刚才那个代码块里被q释放了
unique_ptr描述(in memory):
与shared_ptr不同,某一时刻,只能有一个unique_ptr指向一个给定的对象。因此,当unique_ptr被销毁,它所指的对象也会被销毁。
unique_ptr的初始化必须采用直接初始化
unique_ptr p(new string(“China”));//没问题
unique_ptr p (q);//错误,不支持拷贝
unique_ptr q;
q = p;//错误,不支持赋值
weak_ptr描述(in memory)
weak_ptr是一种不控制所指向对象生存期的智能指针,指向shared_ptr管理的对象,但是不影响shared_ptr的引用计数。它像shared_ptr的助手,一旦最后一个shared_ptr被销毁,对象就被释放,weak_ptr不影响这个过程。

你可能感兴趣的:(C++11智能指针 shared_ptr,unique_ptr和weak_ptr的理解)