Подтвердить что ты не робот

Интеллектуальные указатели и массивы

Как интеллектуальные указатели обрабатывают массивы? Например,

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

Когда my_array выходит за пределы области действия и разрушается, возвращается ли весь массив целых чисел? Восстановлен ли только первый элемент массива? Или происходит что-то еще (например, поведение undefined)?

4b9b3361

Ответ 1

Он вызовет delete[], и, следовательно, весь массив будет восстановлен, но я считаю, что вам нужно указать, что вы используете форму массива unique_ptr по:

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

Это называется Частичная специализация unique_ptr.

Ответ 2

Изменить: этот ответ был неправильным, как объяснено ниже. Вот что я изначально сказал:

Я не думаю, что std:: unique_ptr знает, чтобы вызвать delete []. Это эффективно имеет int * в качестве члена - когда вы удаляете int *, который будет удалите весь массив, так что в этом случае вы в порядке.

Единственная цель удаления [] в отличие от обычного удаления - это то, что он вызывает деструкторы каждого элемента массива. Для примитивных типов это не имеет значения.

Я оставляю это здесь, потому что я чему-то научился, надеюсь, что другие тоже будут.