智能指针在C++11版本之后提供,包含在头文件中,shared_ptr、unique_ptr、weak_ptr、auto_ptr。
shared_ptr :
可以多个指针指向相同的对象。shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存。创建一个智能指针一次,内部的引用计数加1,每析构一次,内部的引用计数减1,减为0时,自动删除所指向的堆内存。shared_ptr内部的引用计数是线程安全的,但是对象的读取需要加锁。
unique_ptr :
“唯一”拥有其所指对象,同一时刻只能有一个unique_ptr指向给定对象(通过禁止拷贝语义、只有移动语义来实现)。相比与原始指针unique_ptr用于其RAII的特性,使得在出现异常的情况下,动态资源能得到释放。
weak_ptr:
是为了配合shared_ptr而引入的一种智能指针(解决shared_ptr的循环引用问题),因为它不具有普通指针的行为,没有重载operator*和->,它的最大作用在于协助shared_ptr工作,像旁观者那样观测资源的使用情况。
参考:
https://en.cppreference.com/w/cpp/memory