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

时间:2020-04-26 00:08:00

标签: c++ delete-operator

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

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

delete[] this->ptr;

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

提前感谢您的回答。

1 个答案:

答案 0 :(得分:1)

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

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

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

相关问题