我看到一些代码片段,如下所示:
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
关于c++ - 将std::unique_ptr重置为数组指针有什么问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51855246/