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

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

本文关键字:指针 数组 什么 问题 unique std ptr      更新时间:2023-10-16

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

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

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

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