c++++智能指针中unique_ptr原生支持数组管理,而shared_ptr需要自定义删除器。1. unique_ptr通过指定数组类型(如int[])实现数组管理,自动调用delete[]释放内存,推荐使用make_unique方式创建;2. shared_ptr需手动指定删除器(如lambda表达式或函数模板),以确保调用delete[];3. 实际开发中更推荐优先使用std::vector或std::array等容器代替裸数组,因其具备更好的安全性和易用性。

C++智能指针确实可以用来管理数组,但并不是所有类型的智能指针都“默认”支持数组管理。其中
unique_ptr
shared_ptr

unique_ptr
unique_ptr
[]
new[]

std::unique_ptr<int[]> arr(new int[10]);
这样声明后,
arr
delete[]
delete
立即学习“C++免费学习笔记(深入)”;
常见用法:

int[]
operator[]
例如:
std::unique_ptr<int[]> createArray() {
return std::make_unique<int[]>(5); // C++14 起支持 make_unique 数组
}注意点:
unique_ptr<int>
new int[10]
delete
delete[]
make_unique<int[]>(size)
shared_ptr
相比之下,
shared_ptr
std::shared_ptr<int> ptr(new int[10]);
这会导致错误,因为默认情况下它会在析构时调用
delete
delete[]
解决办法是手动指定删除器:
std::shared_ptr<int> ptr(new int[10], [](int* p) { delete[] p; });或者封装成一个函数模板:
template<typename T> using array_deleter = std::default_delete<T[]>; std::shared_ptr<int> ptr(new int[10], array_deleter<int>());
适用场景:
std::vector
unique_ptr
shared_ptr
这是设计上的取舍:
unique_ptr
shared_ptr
std::vector
std::array
虽然智能指针能管理数组,但在现代 C++ 中,更推荐使用标准容器:
std::vector
std::array
它们自带内存管理、边界检查、迭代器等特性,比裸数组 + 智能指针组合更安全、易用。
比如:
auto vec = std::make_shared<std::vector<int>>(10);
这样就不需要自己处理数组的释放逻辑了。
基本上就这些。如果你确实需要管理裸数组,记住
unique_ptr
shared_ptr
以上就是C++智能指针能管理数组吗 unique_ptr和shared_ptr的特化版本的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号