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

jiy*_*uru 4 c++ smart-pointers unique-ptr c++11

我看到一些代码片段如下:

std::unique_ptr<uint8_t> mCache;
mCache.reset(new uint8_t[size]);
Run Code Online (Sandbox Code Playgroud)

有人告诉我这个代码有一些问题.谁能给我一些细节?

son*_*yao 11

给定std::unique_ptr<uint8_t> mCache;,当mCache被销毁时,其删除器将用于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
Run Code Online (Sandbox Code Playgroud)