智能指针如何处理数组?例如,
void function()
{
std::unique_ptr<int> my_array(new int[5]);
}
当
my_array
超出范围并被破坏时,整个整数数组是否会被重新声明?只回收数组的第一个元素吗?或者还有其他事情发生(例如未定义的行为)?
它将调用
delete[]
,因此整个数组将被回收,但我相信您需要表明您正在使用 unique_ptr
的数组形式:
std::unique_ptr<int[]> my_array(new int[5]);
这称为 unique_ptr
的
部分专业化。
编辑:这个答案是错误的,正如下面的评论所解释的。这是我最初说的:
我认为 std::unique_ptr 不知道调用delete[]。它有效地 有一个 int* 作为成员——当你删除一个 int* 时,它会 删除整个数组,所以在这种情况下你没问题。
与普通删除相比,delete[] 的唯一目的是 它调用数组中每个元素的析构函数。对于原始的 类型并不重要。
我把它留在这里是因为我学到了一些东西——希望其他人也能学到一些东西。