C++(计数指针)
std::shared_ptr 是 C++ 标准库中的一个智能指针类,用于管理动态分配的内存。它提供了一种共享拥有权(shared ownership)的机制,通过引用计数来跟踪指向同一块内存的所有 std::shared_ptr 实例。当最后一个 std::shared_ptr 被销毁时,它会自动释放所拥有的内存。
基本用法:
#include <memory>
// 创建一个 std::shared_ptr 指向 int
std::shared_ptr<int> sharedInt = std::make_shared<int>(42);
// 创建一个 std::shared_ptr 指向动态分配的数组
std::shared_ptr<int> sharedIntArray = std::make_shared<int[]>(5);
// 复制 std::shared_ptr,共享同一块内存
std::shared_ptr<int> sharedIntCopy = sharedInt;
// 获取引用计数
int refCount = sharedInt.use_count();
// 通过重载的 -> 运算符访问对象
int value = sharedInt->value();
// 检查是否为空
if (sharedInt) {
// 执行操作
}
详细解释:
-
创建
std::shared_ptr:std::shared_ptr<int> sharedInt = std::make_shared<int>(42);使用
std::make_shared函数创建一个std::shared_ptr,它指向一个值为 42 的整数。 -
创建指向动态分配数组的
std::shared_ptr:std::shared_ptr<int> sharedIntArray = std::make_shared<int[]>(5);使用
std::make_shared函数创建一个std::shared_ptr,它指向动态分配的包含 5 个整数的数组。 -
共享拥有权:
std::shared_ptr<int> sharedIntCopy = sharedInt;多个
std::shared_ptr实例可以共享同一块内存。在此例中,sharedInt和sharedIntCopy共享相同的整数对象。 -
引用计数:
int refCount = sharedInt.use_count();使用
use_count方法获取指向对象的std::shared_ptr实例的引用计数。 -
通过重载的
->运算符访问对象:int value = sharedInt->value();std::shared_ptr重载了箭头运算符,使得可以像访问裸指针一样访问对象。 -
检查是否为空:
if (sharedInt) { // 执行操作 }std::shared_ptr可以在条件语句中直接使用,以检查指针是否为空(指向的对象是否存在)。
使用 std::shared_ptr 有助于避免内存泄漏和资源管理问题,因为它会自动处理资源的释放。在现代 C++ 中,推荐使用智能指针来管理动态分配的内存,以提高代码的安全性和可维护性。

浙公网安备 33010602011771号