繁体   English   中英

在C ++中将智能指针用于动态分配的数组

[英]Using smart pointers for dynamically allocated arrays in C++

基于Scott Meyers的Effective C ++的“第16项:在newdelete相应用法中使用相同的形式”,您不应将动态分配的数组放在auto_ptr (或tr1::shared_ptr )中,因为delete p而不是delete[] p被称为破坏(也请参见答案 )。 但是,这对于C ++ 11 <还是仍然适用,尤其对于std::shared_ptrstd::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::arraystd::vector代替数组上的智能指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM