到目前为止,我已经为一些数据处理分配了一个缓冲区,然后将其删除。由于代码变得更大并且可能会在某些时候捕获异常,因此我考虑使用 a 使其更安全std::unique_ptr
并提出了这些解决方案:
unique_ptr<char, void (*)(void *)> p1( (char*)operator new(bufSize), operator delete);
unique_ptr<char[], void (*)(void *) > p2( (char*)operator new(bufSize), operator delete);
memcpy(&((p1.get())[0]), "xyz", 3);
memcpy(&(p2[0]), "xyz", 3);
char x1 = p1.get()[0];
char x2 = p2[0];
对我来说,第一个解决方案 (p1) 似乎是正确的,但是编写 (p1.get())[...] 很乏味
第二种解决方案是方便的,但这是我的问题:
std::unique_ptr<T[]>
似乎以一种特殊的方式支持模板化operator[]
,这让我想知道,如果我使用std::unique_ptr<T[]>
自定义的 new 和 delete 操作,``operator[] 或任何其他功能是否有任何问题,或者是第二种解决方案( p2) 好吗?