智能指针“第16项:使用相同的形式和new
相应用途delete
”斯科特迈尔斯有效的C++,你不应该把动态的auto_ptr
(或tr1::shared_ptr
)分配数组因为delete p
而不是delete[] p
被销毁(另请参阅answers)。但是,这仍然适用于C++ 11 <和更多,特别是std::shared_ptr
和std::unique_ptr
,因为我注意到在一些开源代码中使用了std::unique_ptr<uint8_t[]>
?如果后者是正确的,那么如何区分new
和new []
分配的数据?使用在C++基于动态分配数组
回答
std::unique_ptr
专门用于C++ 11中的数组类型,因为它不适用于std::shared_ptr
。所以std::unique_ptr<uint8_t[]>
将会呼叫delete []
,但std::shared_ptr<uint8_t[]>
默认会调用delete
。
尽管在C++ 17中,此行为已更改。在C++ 17中std::shared_ptr
已经专门用于阵列类型,使用std::shared_ptr<uint8_t[]>
将会调用delete []
。
`
后者是正确的,unique_ptr
与阵列工作正常。它具有调用delete[]
的数组类型的模板专门化。不过,Scott Meyers在他的Effective Modern C++中建议使用std::array
或std::vector
而不是数组上的智能指针。
他还建议使用'boost :: scoped_array'和'boost :: shared_array';)Can你提供了一个指向数组类型的模板专门化的链接? – Matthias
@Matthias查看Richard Critten的评论,他提供了cppreference的链接。模板实例化在您的libstdC++代码中。 –
- 1. 动态数组分配在C++问题
- 2. 删除动态分配的数组C++
- 3. C中的动态数组分配
- 4. 使用基于动态/状态的分配器的STL实现?
- 5. 动态分配数组
- 6. ifstream动态分配数组
- 7. 动态分配3D数组
- 8. C:静态到动态分配在多个维数组
- 9. C中动态分配数组的数组元素数
- 10. 动态分配在c + +
- 11. 动态分配C
- 12. 动态内存分配和使用C
- 13. Ada用于初始化动态分配数组的语法
- 14. 如何动态分配2维数组用于特定目的?
- 15. 在类存储结构中使用动态分配的数组
- 16. 如何在c#中使用动态分配制作类对象的数组?
- 17. 数据库创建使用动态内存分配使用C
- 18. 动态分配的指针数组结构用C
- 19. 获取动态分配的数组的长度用C
- 20. 在C++源文件之间共享动态分配的数组
- 21. 如何在C中创建多维动态分配数组?
- 22. 结构数组中的动态分配内存(在C中)
- 23. 如何在C++中删除非动态分配的数组?
- 24. 动态分配的数组如何在C++中被释放?
- 25. 如何在C中动态分配名称数组?
- 26. 如何在Qt C++中为数组动态分配内存?
- 27. 如何在ANSI C中动态分配POINTERS的二维数组?
- 28. 基于输入的动态excel数组
- 29. 基于数组的动态侦听器
- 30. C&C++中数组的动态内存分配
使用'std :: vector'作为数组(可能不是'bool',依赖)。它是C++中标准动态大小的数组。 –
请参阅http://en.cppreference.com/w/cpp/memory/unique_ptr并查看点(2),它是注释 –