hel*_*922 44 c++ smart-pointers c++11
智能指针如何处理数组?例如,
void function(void)
{
std::unique_ptr<int> my_array(new int[5]);
}
Run Code Online (Sandbox Code Playgroud)
当my_array
超出范围并被破坏时,整个整数数组是否会被重新声明?只回收了数组中的第一个元素吗?或者还有其他事情发生(例如未定义的行为)?
Alo*_*ave 75
它将调用delete[]
,因此整个数组将被回收,但我相信你需要表明你使用的数组形式unique_ptr
:
std::unique_ptr<int[]> my_array(new int[5]);
Run Code Online (Sandbox Code Playgroud)
这被称为局部特殊化的unique_ptr
.
编辑:正如下面的评论所解释的那样,这个答案是错误的。这是我最初所说的:
我不认为 std::unique_ptr 知道调用 delete[]。它实际上有一个 int* 作为成员——当你删除一个 int* 时,它会删除整个数组,所以在这种情况下你没问题。
delete[] 与普通删除相反的唯一目的是它调用数组中每个元素的析构函数。对于原始类型,这无关紧要。
我把它留在这里是因为我学到了一些东西——希望其他人也能。
归档时间: |
|
查看次数: |
27536 次 |
最近记录: |