(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 的。