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