智能指针C++

(1)auto_ptr:管理权唯一,释放权唯一

存在的问题:当多个智能指针指向同一堆内存时,新智能指针具有管理权,原智能指针指向空,导致原智能指针失效

(2)带标志位的auto_ptr:管理权不唯一,释放权唯一

存在的问题:释放权的转移可能导致堆内存的提前释放,而使其他智能指针的使用出错

(3)scope_ptr:一个智能指针只能指向一个堆内存,不允许权限转移

存在的问题:内存浪费严重(对于每一块堆内存,都在栈上生成一个智能指针对象,由该对象指向它)

与boost库里的unique_ptr类似:

unique_ptr:禁止拷贝和移动来保证所有权唯一

unique_ptr存在的问题:(1)不能数据共享;(2)在设计层面保证所有权唯一,但使用时并不能保证

(4)shared_ptr:带有引用计数

存在的问题:智能指针之间的相互引用问题会导致内存泄漏

(5)weak_ptr:不可单独使用,常与强智能指针结合使用,以解决强智能指针相互引用的问题

===========================================================================================================================================================================================================================

std::shared_ptr:共享的智能指针
std::unique_ptr:独占的智能指针
std::weak_ptr:弱引用的智能指针,它不共享指针,不能操作资源,是用来监视 shared_ptr 的。

你可能感兴趣的:(c++)