C/C++因为指针的存在,可以直接快速操作内存地址,但也引发很多内存管理问题;C++智能指针是为了优化直接使用裸指针的内存管理而出现的机制。比如常用的std::shared_ptr,用于将裸指针封装一层,加上引用计数等机制,自动管理内存的释放。除了shared_ptr,C++智能指针还有std::weak_ptr、std::unique_ptr、std::auto_ptr等,下面逐个介绍下基础用法。
std::shared_ptr
C++最常用的智能指针,用于对裸指针的替换,一般用于多个指针指向同一对象的场景:
std::shared_ptr<Obj> obj_ptr = std::make_shared<Obj>(); // 引用计数为1
std::shared_ptr<Obj> obj2_ptr = obj_ptr; // 引用计数为2
// reset方法:引用计数-1,obj2_ptr为空智能指针
obj2_ptr.reset();
// get方法:获取原始指针
Obj* obj_raw_ptr = obj2_ptr.get();
obj_ptr和obj2_ptr同时引用obj对象,此时obj对象的引用计数为2