C++智能指针与移动语义详解
1. unique_ptr的工作原理及使用
unique_ptr 是一种智能指针,它通过原始指针管理堆上分配的对象或数组。当智能指针超出作用域、使用 operator=
分配新指针或使用 release()
方法放弃所有权时,会进行适当的资源释放。默认情况下,使用 operator delete
销毁管理的对象,但用户在构造智能指针时可以提供自定义删除器。
以下是 unique_ptr 的一些关键特性和使用示例:
- 创建 unique_ptr :可以使用构造函数直接创建,也可以使用 C++14 引入的 std::make_unique()
函数模板。例如:
// 使用构造函数创建并初始化数组
std::unique_ptr<int[]> pa(new int[3]{ 1,2,3 });
// 使用 make_unique 创建并初始化数组
std::unique_ptr<int[]> pa = std::make_unique<int[]>(3);
for (int i = 0; i < 3; ++i)
pa[i] = i + 1;
- 避免内存泄漏 :
std::make_unique()
的主要优点是在某些异常抛出的情况下避免潜在的内存泄漏。例如: