Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Smart Pointer

内存管理是 C++ 编程中的一个关键问题,尤其是当涉及到动态分配的内存时,程序员需要确保及时释放资源以避免内存泄漏或其他潜在问题。为了解决这个问题,C++ 引入了智能指针,它们通过自动管理内存的生命周期来帮助开发者更安全地进行内存操作。智能指针不仅简化了内存管理的复杂性,还提高了程序的安全性,避免了许多常见的内存错误。

智能指针是 C++ 标准库中的模板类,它们的作用是通过自动释放所持有的资源来管理动态分配的内存。智能指针的核心特点是,它们会在不再需要资源时自动释放内存,从而减少内存泄漏的风险。C++11 引入了三种主要类型的智能指针:std::unique_ptr、std::shared_ptr 和 std::weak_ptr,它们适用于不同的使用场景。除此之外,std::auto_ptr 是 C++98 中的一个智能指针,但由于设计缺陷,它在 C++11 中被弃用了。

在本节中,我们将详细介绍这四种智能指针的特点、适用场景以及如何使用它们。

智能指针类型所有权类型主要特点适用场景创建方式
std::auto_ptr独占所有权(已弃用)自动管理内存,但存在隐式所有权转移的问题,已在 C++11 中弃用不推荐使用(已被 std::unique_ptr 取代)std::auto_ptr<T> ptr(new T);
std::unique_ptr独占所有权不能拷贝,只能移动,自动销毁所管理的资源单一所有者的资源管理,适用于工厂模式等std::unique_ptr<T> ptr = std::make_unique<T>();
std::shared_ptr共享所有权引用计数,多个指针共享同一资源,最后一个销毁时释放资源多个对象共享资源,如缓存、资源池std::shared_ptr<T> ptr = std::make_shared<T>();
std::weak_ptr不管理资源生命周期防止 shared_ptr 引用计数循环引用,不能直接访问资源避免 shared_ptr 的循环引用问题std::weak_ptr<T> weak_ptr = shared_ptr;