引入智能指针的目的,某个对象不再被引用,立刻被回收,防止裸指针忘记释放内存或重复释放内存。
实现原理,RAII(Resource Acquisition Is Initialization)资源创建即初始化,利用栈对象管理共享资源。
各种智能指针区别
1 auto_ptr C98标准 已弃用
原对象拷贝给新对象的时候,原对象就会被设置为nullptr,设计存在缺陷。
2 unique_ptr
c11标准,可以替代auto_ptr,将拷贝构造函数和赋值重载函数给禁用掉,“唯一”拥有其所指对象,同一时刻只能有一个unique_ptr指向给定对象(禁止拷贝、赋值),但是可以释放所有权,转移所有权。
3 share_ptr
采用引用计数来实现多个share_ptr对象之间共享资源,允许多个智能指针可以指向同一块资源,保证共享的资源只会被释放一次,因此是程序不会崩溃掉。
缺陷:1 使用不当可能引发循环引用
2 使用不当会意外延长对象的生命周期
4 weak_ptr
weak_ptr 类的对象它可以指向shared_ptr,并且不会改变shared_ptr的引用计数。weak_ptr 一般配合share_ptr使用,不管资源的释放。