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

问题描述 投票:4回答:1

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

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

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

c++ c++11 smart-pointers unique-ptr
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.