[英]Using smart pointers for dynamically allocated arrays in C++
基于Scott Meyers的Effective C ++的“第16项:在new
和delete
相应用法中使用相同的形式”,您不应将动态分配的数组放在auto_ptr
(或tr1::shared_ptr
)中,因为delete p
而不是delete[] p
被称为破坏(也请参见答案 )。 但是,这对于C ++ 11 <还是仍然适用,尤其对于std::shared_ptr
和std::unique_ptr
,因为我在某些开源代码中注意到使用std::unique_ptr<uint8_t[]>
吗? 如果后者是正确的,那么如何区分new
分配的数据和new []
分配的数据?
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在他的有效现代C ++中建议使用std::array
或std::vector
代替数组上的智能指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.