智能指针和数组

时间:2011-07-15 21:44:16

标签: c++ c++11 smart-pointers

智能指针如何处理数组?例如,

void function(void)
{
    std::unique_ptr<int> my_array(new int[5]);
}

my_array超出范围并被破坏时,是否会重新声明整个整数数组?只回收了数组中的第一个元素吗?或者还有其他事情发生(例如未定义的行为)?

2 个答案:

答案 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 []的唯一目的与普通删除相反   它调用数组中每个元素的析构函数。对于原始   类型没关系。

我将它留在这里,因为我学到了一些东西 - 希望其他人也会这样做。