C++unique_ptr与数组对象结合使用

正确声明std::unique_ptr<int[]>可管理数组,避免未定义行为;应使用下标访问元素,且优先选用std::vector以获得更安全完整的功能支持。

C++unique_ptr与数组对象结合使用

在C++中,std::unique_ptr 是一种智能指针,用于管理动态分配对象的生命周期,确保资源在不再需要时自动释放。当与数组结合使用时,需要特别注意语法和行为,否则可能导致未定义行为或资源泄漏。

正确声明指向数组的 unique_ptr

默认情况下,std::unique_ptr 假定管理的是单个对象。如果要管理数组(通过 new[] 分配),必须显式指定数组类型,以便使用正确的删除方式(即 delete[] 而不是 delete)。

正确声明方式如下:

 std::unique_ptr<int[]> arr(new int[10]); 

这里 int[] 表明这是一个数组类型,unique_ptr 会自动使用 delete[] 来释放内存。

立即学习C++免费学习笔记(深入)”;

访问和操作数组元素

一旦创建了指向数组的 unique_ptr,可以像普通指针一样使用下标操作符访问元素:

 arr[0] = 42; arr[5] = 100; 

也可以使用指针算术或 get() 获取原始指针:

C++unique_ptr与数组对象结合使用

SkyReels

SkyReels是全球首个融合3D引擎与生成式ai的AI视频创作平台

C++unique_ptr与数组对象结合使用865

查看详情 C++unique_ptr与数组对象结合使用

 int* raw = arr.get(); *(raw + 1) = 200; 

为什么不能用默认 unique_ptr 管理数组?

如果错误地使用:

 std::unique_ptr<int> bad(new int[10]); // 错误!delete 而非 delete[] 

这会导致未定义行为,因为析构时会调用 delete 而不是 delete[],C++ 标准规定:用 new[] 分配的内存必须用 delete[] 释放。

推荐替代方案:优先使用 std::vector

虽然 unique_ptr<T[]> 可以管理数组,但它不提供 size()、begin()/end() 等容器接口,也不支持动态扩容。对于大多数场景,更推荐使用 std::vector

 std::vector<int> vec(10); // 更安全,功能更完整 

只有在明确需要动态分配原始数组且无法使用 vector 时(如对接 C 接口),才考虑使用 unique_ptr<T[]>

基本上就这些。只要记住声明时加上 [],并优先选择 vector,就能避免常见陷阱。

c++ 为什么 int 指针 接口 delete 对象

上一篇
下一篇