0%

C++ 中使用智能指针管理数组

C++ 智能指针不仅能管理普通对象,也可以管理数组对象

以前只知道使用智能指针管理对象

1
2
3
std::unique_ptr<A> pA(new A);
// do something with pA or pA.Get()
// 超过作用域后, pA自动释放资源

智能指针也可以用于管理数组

1
2
3
std::unique_ptr<int[]> pArr;
pArr.reset(new int[10]); // pArr 管理10个大小的int数组
pArr.reset(new int[64]); // 替换pArr的管理数组, 原来的10大小的数组将被自动释放

以上代码管理数组对象的 reset 方法在 C++17 之前不可用

1
2
3
4
5
// 特化 unique_ptr<T[]>的成员
template<class U>
void reset(U) = delete; // C++17 前
template<class U>
void reset(U) noexcept; // C++17 起

千万不要用普通的智能指针指向数组地址,否则可能内存泄漏!!

std::unique_ptr<int> p(new int[xx]) 错误用法!