阅读量:1
C++智能指针是一种用于管理动态分配的内存资源的工具,可以帮助防止内存泄漏和悬挂指针等问题。C++11引入了两种主要的智能指针:std::shared_ptr和std::unique_ptr。
使用std::shared_ptr:
- 包含头文件:
#include <memory>
- 创建智能指针:
std::shared_ptr<Type> ptr = std::make_shared<Type>(args);
- 使用智能指针:可以像使用原始指针一样使用智能指针,例如
ptr->method()
或(*ptr).method()
- 共享所有权:可以通过将智能指针赋值给另一个智能指针或使用
std::shared_ptr
的构造函数来共享所有权 - 手动释放内存:不需要手动释放智能指针指向的内存,当智能指针超出范围时,会自动释放内存
- 包含头文件:
使用std::unique_ptr:
- 包含头文件:
#include <memory>
- 创建智能指针:
std::unique_ptr<Type> ptr = std::make_unique<Type>(args);
- 使用智能指针:可以像使用原始指针一样使用智能指针,例如
ptr->method()
或(*ptr).method()
- 独占所有权:std::unique_ptr只能拥有一个指向动态分配内存的指针,不能共享所有权
- 移动语义:可以通过std::move将std::unique_ptr的所有权转移给另一个std::unique_ptr
- 手动释放内存:不需要手动释放智能指针指向的内存,当智能指针超出范围时,会自动释放内存
- 包含头文件:
需要注意的是,智能指针不应与原始指针混合使用,并且应避免循环引用。此外,在使用智能指针时,应避免向其构造函数传递动态分配的数组,应使用std::vector或std::array等容器来管理动态分配的数组。