C++智能指针shared_ptr使用指南
C++ 11引入了shared_ptr智能指针来自动化管理堆内存,解决手动delete导致的泄漏或重复释放问题。其核心基于引用计数机制,当最后一个指向对象的shared_ptr销毁时自动清理资源。
什么是shared_ptr
shared_ptr是C++11标准库中的模板类,用于共享所有权。多个shared_ptr实例可以指向同一个动态分配的对象,它们共同维护该对象的生命周期。声明时需指定所管理的对象类型:
如何创建shared_ptr
推荐使用std::make_shared函数进行创建,这比直接使用new更高效且安全(异常安全)。以下是常见的创建与判断方式:
// 默认初始化为空指针
shared_ptr<int>p1;
// 使用 make_shared 创建并赋值
p1 = make_shared<int>(666);
// 判断指针是否为空 (if(p))
if (p1) {
// 操作 p1
}
引用计数机制与查询
shared_ptr通过引用计数(Reference Counting)追踪有多少个指针正在共享同一对象。每增加一个拷贝或赋值,计数加一;每减少一个,计数减一。用户可以通过use_count()成员函数查看当前的引用数值:
shared_ptr<int>p2, p3;
p2 = p1;
p3 = p1;
// 此时 p1, p2, p3 指向同一对象,引用计数为 3
cout << p2.use_count() << endl;
何时释放内存
当某个对象的引用计数降为0时,shared_ptr会自动调用delete释放该对象占用的内存,无需手动干预。这一特性在函数作用域结束时尤为明显:
class SP {
public:
~SP() { cout << "Destroy SP" << endl; }
};
void auto_destroy() {
// 在栈上创建局部 shared_ptr
shared_ptr<SP>p1 = make_shared<SP>();
}
// 函数执行完毕后,p1 离开作用域,若引用计数为0则自动调用 ~SP()
总结
shared_ptr通过维护引用计数实现了资源的自动管理。开发者只需关注逻辑,无需担心内存释放时机。但需注意循环引用可能导致计数无法归零的情况,此时应配合weak_ptr使用。以上就是C++智能指针shared_ptr的详细内容,更多关于C++指针的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













