1. 智能指针的前世今生
第一次接触C++内存管理时,我像大多数新手一样被new/delete折磨得够呛。直到在某个深夜调试内存泄漏时,同事扔给我一段使用shared_ptr的代码,那种自动释放资源的魔法让我瞬间着迷。智能指针不是语法糖,而是C++开发者对抗内存问题的战略武器。
C++11引入的智能指针家族包含三大主力:掌控独享所有权的unique_ptr、实现共享管理的shared_ptr,以及充当观察者的weak_ptr。它们都定义在
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 智能指针核心成员详解
2.1 unique_ptr:独占所有权的守卫者
unique_ptr就像个固执的管家,坚决不允许其他人染指它管理的内存。这种独占特性带来极高的运行效率——没有引用计数开销,大多数操作都能被编译器优化为裸指针操作。我常用它管理文件句柄:
cpp复制std::unique_ptr<FILE, decltype(&fclose)> logFile(fopen("debug.log", "a"), &fclose);
这里使用了自定义删除器,确保文件正确关闭。移动语义是unique_ptr的核心特性,当需要转移所有权时:
cpp复制auto ptr1 = std::make_unique<int>(42);
auto ptr2 = std::move(ptr1); // 所有权转移
// 此时ptr1 == nullptr
关键技巧:优先使用std::make_unique()创建对象,它比直接new更安全高效,能避免内存泄漏的潜在风险。
2.2 shared_ptr:共享管理的协作专家
shared_ptr通过引用计数实现内存的共享管理,就像团队中的共享白板,最后一个离开会议室的人负责擦干净。它的典型使用场景:
cpp复制class Device {
public:
void setConfig(std::shared_ptr<Config> cfg) {
this->config = cfg; // 引用计数+1
}
