概述
智能指针是C++11引入的RAII(资源获取即初始化)工具,用于自动管理动态内存,防止内存泄漏。位于 <memory>头文件中。
主要类型
1. std::unique_ptr<T>
-
独占所有权:同一时间只有一个智能指针可拥有该对象
-
不可复制,但支持移动语义
-
适用于单一所有权的资源管理
std::unique_ptr<MyClass> ptr(new MyClass());
auto ptr2 = std::make_unique<MyClass>(); // C++14推荐
2. std::shared_ptr<T>
-
共享所有权:多个指针共享同一对象,引用计数为0时自动释放
-
支持复制和移动
-
有少量性能开销(引用计数管理)
auto ptr = std::make_shared<MyClass>();
std::shared_ptr<MyClass> ptr2 = ptr; // 引用计数+1
3. std::weak_ptr<T>
-
弱引用:不增加引用计数,不拥有对象所有权
-
解决
shared_ptr循环引用问题 -
需通过
lock()转换为shared_ptr后使用
std::weak_ptr<MyClass> weak = sharedPtr;
if(auto sp = weak.lock()) {
// 使用sp
}
使用建议
-
优先使用
make_unique/make_shared,更安全高效 -
默认使用
unique_ptr,需要共享时再用shared_ptr -
循环引用场景使用
weak_ptr打破循环 -
避免裸指针与智能指针混用
-
明确所有权语义,选择合适指针类型
内存安全
智能指针自动释放内存,显著减少内存泄漏和悬空指针问题,是现代C++资源管理的核心工具。