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

What's wrong to reset std::unique_ptr to pointer to array?

我看到如下代码片段:

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

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

给定 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