shared_ptr通过引用计数实现共享资源的自动内存管理,避免内存泄漏与重复释放;使用make_shared创建更安全高效;循环引用问题可通过weak_ptr解决。

C++中,
shared_ptr
shared_ptr
shared_ptr
shared_ptr
shared_ptr
shared_ptr
shared_ptr
这套机制,在我看来,简直是现代C++处理共享资源的一大福音。想想看,以前我们管理一个在多个模块间传递的对象,需要小心翼翼地追踪谁是“最终拥有者”,谁负责
delete
shared_ptr
我们通常会使用
std::make_shared
shared_ptr
MyClass
立即学习“C++免费学习笔记(深入)”;
#include <memory>
#include <iostream>
class MyClass {
public:
MyClass() { std::cout << "MyClass constructed\n"; }
~MyClass() { std::cout << "MyClass destructed\n"; }
void doSomething() { std::cout << "MyClass doing something\n"; }
};
int main() {
// 使用 make_shared 创建
std::shared_ptr<MyClass> ptr1 = std::make_shared<MyClass>();
ptr1->doSomething();
// 另一个 shared_ptr 共享所有权
std::shared_ptr<MyClass> ptr2 = ptr1;
std::cout << "Reference count: " << ptr1.use_count() << "\n"; // 输出 2
ptr2->doSomething();
{
std::shared_ptr<MyClass> ptr3 = ptr1;
std::cout << "Reference count: " << ptr1.use_count() << "\n"; // 输出 3
} // ptr3 离开作用域,引用计数减1
std::cout << "Reference count: " << ptr1.use_count() << "\n"; // 输出 2
// ptr1 和 ptr2 离开 main 作用域时,MyClass 会被析构
return 0;
}这里
ptr1
ptr2
ptr3
MyClass
ptr3
ptr1
ptr2
MyClass
这其实是个很基础但又关键的问题。当我们谈论资源共享时,裸指针(Raw Pointer)的缺点是显而易见的:手动管理生命周期意味着巨大的心智负担和潜在的错误。谁来
delete
delete
delete
delete
shared_ptr
至于
unique_ptr
unique_ptr
unique_ptr
std::move
unique_ptr
unique_ptr
unique_ptr
shared_ptr
shared_ptr
shared_ptr
shared_ptr
shared_ptr
解决这个问题的“银弹”就是
std::weak_ptr
weak_ptr
shared_ptr
shared_ptr
使用
weak_ptr
以上就是C++如何在内存管理中使用shared_ptr共享资源的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号