C++(智能指针)
在 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++ 代码,减少手动内存管理的烦恼。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享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)