将std :: unique_ptr重置为数组指针有什么问题?

时间:2018-08-15 08:20:57

标签: c++ c++11 smart-pointers unique-ptr

我看到一些如下代码段:

std::unique_ptr<uint8_t> mCache;
mCache.reset(new uint8_t[size]);

有人告诉我此代码存在一些问题。 谁能给我一些细节吗?

1 个答案:

答案 0 :(得分:10)

鉴于std::unique_ptr<uint8_t> mCache;,当mCache被销毁时,其deleter将使用delete销毁被管理的指针(如果有的话),即为单个对象释放内存。但是在mCache.reset(new uint8_t[size]);管理的mCache之后是指向数组的指针,这意味着它应该使用delete[]来代替;使用delete为数组取消分配内存会导致UB。

代码可以更改为

std::unique_ptr<uint8_t[]> mCache; // mCache is supposed to manage pointer to array
mCache.reset(new uint8_t[size]);   // safe now