Вопрос касается C++11, использования auto в подобной структуре:
auto array = new int[20];
Нужно ли в данном случае вызывать delete [] для array, или деструктор умного указателя о нем позаботится сам?
По крайней мере данный код работает (вместо типа int я использовал структуру).
В данном случае 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];
}
Вызываются только конструкторы, так что имеем обычную утечку памяти :)
Никакого отношения к "умным указателям" данный auto не имеет. В данном случае вы получите обычный "голый" указатель, у которого нет никакого деструктора. Освобождение памяти через delete[] так же необходимо, как и обычно, и это - ваша задача.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей