c++ - 删除动态分配的数组与单个指针

标签 c++ delete-operator

因此,我正在尝试实现唯一的指针,并且希望能够在分配单个对象和分配数组之间进行选择。

假设如果我使用new[]甚至是单个对象(new[1])分配了所有内容,而不是根据构造函数的参数在new T(Args...)new[n] T(Args...)之间进行选择,
会像这样删除:

delete[] this->ptr;

有什么缺点vs

if (1 < size) {
    delete[] this->ptr; // this was allocated with new[]
    return;
}
delete this->ptr; // this was allocated with new

感谢您提前答复。

最佳答案

通常,唯一指针通过获取客户端提供的裸指针unique_ptr::unique_ptr(T*)的所有权来工作。在这种情况下,对于客户端来说,在某种程度上限制了它们不允许传递指向大小为1的数组的指针(在一种实现方式中),或者不应将其传递给非数组的指针(另一种选择)。 )。

此外,这两种选择都会带来额外的开销,尽管开销很小。一种选择有一个分支,另一种选择存储数组的大小,这对于非数组分配不是必需的。

指定标准唯一指针的方式,客户端可以选择他们想要的限制。要使用非数组删除,请实例化unique_ptr<T>,要使用数组删除,请实例化unique_ptr<T[]>专门化。并且由于选择是在编译时进行的,因此不需要运行时分支。

关于c++ - 删除动态分配的数组与单个指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61434211/

相关文章:

c++ - 为什么 C++ 中没有放置删除表达式?

c++ - 在 C++ 中使用 delete 命令会导致段错误的原因是什么?

c++ - 这是 free char * 的正确点吗?

c++ - 如何对结构容器的 vector 进行排序?

c++ - 不可复制的对象、映射和 shared_ptr : error in the copy constructor

c++ - = 函数声明后删除的含义

c++ - 合并排序 : Heap Corruption on delete[]

java - 从中间向外遍历数组的算法?

c++ - 检查音频缓冲区的声音

c++ - 为什么即使参数标记为 'const' 也会调用复制构造函数?