1. 智能指针:C++开发者的内存管理利器
第一次遇到内存泄漏是在我刚工作那年。当时负责维护一个长期运行的服务器程序,运行两周后就会莫名其妙崩溃。用valgrind检查才发现是某个不起眼的工具类忘记释放内存,累计吃掉了几十个G的内存。从那以后,我就把智能指针当成了C++开发的标配武器。
智能指针本质上是一个封装了原生指针的类对象,通过RAII(Resource Acquisition Is Initialization)机制自动管理内存生命周期。当智能指针对象离开作用域时,其析构函数会自动释放持有的内存,从根本上避免了手动管理内存的各种隐患。现代C++(C++11及以上)主要提供了三种智能指针:unique_ptr、shared_ptr和weak_ptr,它们各自适用于不同的所有权场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 智能指针核心类型解析
2.1 unique_ptr:独占所有权的轻量级选择
unique_ptr如其名,表示对内存资源的独占所有权。这种设计使其成为最轻量、最高效的智能指针,几乎没有任何额外开销。我经常用它来替代原本需要手动delete的普通指针。
cpp复制// 创建独占指针
std::unique_ptr<MyClass> ptr(new MyClass());
// C++14后更推荐make_unique
auto ptr = std::make_unique<MyClass>();
unique_ptr禁止拷贝,但支持移动语义。这在资源转移场景非常有用:
cpp复制void process(std::unique_ptr<MyClass>&& resource) {
// 处理资源
}
auto res = std::make_unique<MyClass>();
process(std::move(res)); // 所有权转移
关键提示:unique_ptr可以自定义删除器,这对管理非内存资源特别有用。比如用unique_ptr管理文件句柄:
cpp复制auto fileCloser = [](FILE* f) { fclose(f); }; std::unique_ptr<FILE, decltype(fileCloser)> file(fopen("data.tx
