Нужен ли delete[] при использовании new c умным указателем типа auto

218
08 января 2018, 10:40

Вопрос касается C++11, использования auto в подобной структуре:

auto array = new int[20];

Нужно ли в данном случае вызывать delete [] для array, или деструктор умного указателя о нем позаботится сам?

По крайней мере данный код работает (вместо типа int я использовал структуру).

Answer 1

В данном случае auto - указатель, так что ни о каком умном указателе речь не идет.

Там, где вы использовали структуры - вряд ли у вас вызывались деструкторы.

Вот, чтоб убедиться:

#include <iostream>
#include <iomanip>
using namespace std;
class Test {
public:
    Test()   { cout << "Test()\n"; }
    ~Test()  { cout << "~Test()\n"; }
};

int main()
{
    auto t = new Test[5];
}

Вызываются только конструкторы, так что имеем обычную утечку памяти :)

Answer 2

Никакого отношения к "умным указателям" данный auto не имеет. В данном случае вы получите обычный "голый" указатель, у которого нет никакого деструктора. Освобождение памяти через delete[] так же необходимо, как и обычно, и это - ваша задача.

READ ALSO
Класс однонаправленное кольцо - C++

Класс однонаправленное кольцо - C++

Разработать класс реализующий список (однонаправленное кольцо)Элемент списка содержит информацию о товаре на складе фирмы

278
Как сделать перегрузку операторов

Как сделать перегрузку операторов

Реально ли для объектов этого класса использовать перегрузку оператора + (суммы?) и как это сделать? и имеет ли смысл?

223
Все Типы данных с++

Все Типы данных с++

Какие есть типы данных в С++? Кто мог бы логически расставить по местам? Есть стандартные типы (int, double

243
Permission&#39;s для чтения файлов других приложений в /data/data/%appname%

Permission's для чтения файлов других приложений в /data/data/%appname%

Ребята, может кто знает, какие в android нужны permissions для чтения файлов других приложений в /data/data/%appname% ?

208