智能指针可以与使用 new T[] 分配的数组一起使用吗?

问题描述 投票:0回答:2

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

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

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

c++ c++11 new-operator smart-pointers unique-ptr
2个回答
98
投票

它将调用

delete[]
,因此整个数组将被回收,但我相信您需要表明您正在使用
unique_ptr
的数组形式:

std::unique_ptr<int[]> my_array(new int[5]);

这称为 unique_ptr

部分专业化


6
投票

编辑:这个答案是错误的,正如下面的评论所解释的。这是我最初说的:

我认为 std::unique_ptr 不知道调用delete[]。它有效地 有一个 int* 作为成员——当你删除一个 int* 时,它会 删除整个数组,所以在这种情况下你没问题。

与普通删除相比,delete[] 的唯一目的是 它调用数组中每个元素的析构函数。对于原始的 类型并不重要。

我把它留在这里是因为我学到了一些东西——希望其他人也能学到一些东西。

© www.soinside.com 2019 - 2024. All rights reserved.