C++(智能指针)

在 C++ 中,智能指针是一种用于管理动态分配内存的智能化工具。它们提供了对动态分配资源的自动管理,以减少内存泄漏和资源泄漏的风险。C++ 标准库提供了两种主要的智能指针类型:std::shared_ptrstd::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_ptrstd::unique_ptr 的建议:

  • 如果可以使用 std::unique_ptr,则优先选择它,因为它更轻量且没有引用计数的开销。
  • 当需要多个智能指针共享同一块内存时,使用 std::shared_ptr
  • 避免使用裸指针进行内存管理,以减少内存泄漏和悬挂指针的风险。

这些智能指针的使用有助于更安全、更容易维护的 C++ 代码,减少手动内存管理的烦恼。



posted @   做梦当财神  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2022-12-08 np.percentile()
2021-12-08 Python lambda 细讲
2021-12-08 Python 默认值参数
2017-12-08 MongoDB(课时29 MapReduce)
点击右上角即可分享
微信分享提示