智能指针和数组

smart pointers and arrays

本文关键字:数组 指针 智能      更新时间:2023-10-16

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

void function(void)
{
    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[]相对于普通delete的唯一目的是它调用数组中每个元素的析构函数。为原始的键入不重要

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