使用unique_ptr时对象为独占所有权,适合类内部资源管理、工厂函数返回及容器存储唯一拥有对象,不可复制只能移动。使用shared_ptr时适用于多指针共享同一对象所有权的情形,通过引用计数管理生命周期,常用于资源共享、缓存系统和回调机制。当存在循环引用风险或需临时访问对象时应使用weak_ptr,它不增加引用计数,可打破循环引用并通过lock()获取临时shared_ptr。选择策略为:优先unique_ptr,需要共享则用shared_ptr,担心循环引用或需临时访问则用weak_ptr。

在C++11中引入的智能指针(
shared_ptr
unique_ptr
weak_ptr

unique_ptr
unique_ptr

常见使用场景:
立即学习“C++免费学习笔记(深入)”;
例如:

std::unique_ptr<int> ptr(new int(42));
一旦你尝试复制这个指针,编译就会报错,这有助于防止意外的共享。
shared_ptr
当你需要多个指针共享同一个对象的所有权时,就该用
shared_ptr
典型用途包括:
比如:
std::shared_ptr<int> p1 = std::make_shared<int>(10); std::shared_ptr<int> p2 = p1; // 引用计数变为2
注意:频繁创建和销毁
shared_ptr
weak_ptr
weak_ptr
shared_ptr
举个例子: 如果你有两个对象 A 和 B,A 持有 B 的
shared_ptr
shared_ptr
weak_ptr
std::shared_ptr<A> a = std::make_shared<A>(); std::weak_ptr<A> wa = a;
使用前需要用
lock()
shared_ptr
if (auto shared = wa.lock()) {
// 使用 shared
} else {
// 对象已经被释放
}简单来说:
unique_ptr
shared_ptr
weak_ptr
基本上就这些。记住,选对指针类型不仅能写出更安全的代码,还能提升性能和可维护性。
以上就是C++11的智能指针应该怎么选择 shared_ptr unique_ptr weak_ptr对比的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号