将 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
我看到如下代码片段:
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