在 C++ 中,智能指针是一种用于管理动态分配内存的智能化工具。它们提供了对动态分配资源的自动管理,以减少内存泄漏和资源泄漏的风险。C++ 标准库提供了两种主要的智能指针类型:std::shared_ptr
和 std::unique_ptr
。以下是这两种智能指针的基本解释:
1. std::shared_ptr
:
std::shared_ptr
是一种共享拥有权的智能指针。多个 shared_ptr
可以同时共享同一块内存,并且当最后一个 shared_ptr
不再引用这块内存时,它会自动释放该内存。std::shared_ptr
使用引用计数来追踪内存的所有者数量。
#include <memory>
std::shared_ptr<int> sharedPtr1 = std::make_shared<int>(42);
std::shared_ptr<int> sharedPtr2 = sharedPtr1; // 共享所有权
// 引用计数为 2
// 当 sharedPtr1 和 sharedPtr2 超出作用域时,引用计数减为 1
// 当最后一个 shared_ptr 超出作用域时,内存被释放
2. std::unique_ptr
:
std::unique_ptr
是一种独占拥有权的智能指针。每个 std::unique_ptr
指向唯一的对象,不能被复制或共享,但可以被移动。当 std::unique_ptr
超出作用域时,它所拥有的对象会被自动释放。
#include <memory>
std::unique_ptr<int> uniquePtr1 = std::make_unique<int>(42);
// std::unique_ptr<int> uniquePtr2 = uniquePtr1; // 错误,不能复制
// 当 uniquePtr1 超出作用域时,拥有的内存被释放
使用 std::shared_ptr
和 std::unique_ptr
的建议:
- 如果可以使用
std::unique_ptr
,则优先选择它,因为它更轻量且没有引用计数的开销。 - 当需要多个智能指针共享同一块内存时,使用
std::shared_ptr
。 - 避免使用裸指针进行内存管理,以减少内存泄漏和悬挂指针的风险。
这些智能指针的使用有助于更安全、更容易维护的 C++ 代码,减少手动内存管理的烦恼。
标签:std,C++,智能,内存,shared,unique,ptr,指针 From: https://www.cnblogs.com/keye/p/17885949.html