Как использовать уникальный ptr для массивов


У меня есть класс

class A {
public:
  A(){cout<<"C";}
  ~A(){cout<<"D";}
};
int main(){
  unique_ptr<A> a(new A[5]); // - doesn't work 
  unique_ptr<A> a(new A[1]); // - doesn't work
  unique_ptr<A> a(new A); // - works
}

Почему это происходит?

Я думаю, что дело в конструкторе перемещения (он не может быть создан автоматически из-за деструктора), но зачем нам нужен конструктор перемещения здесь?

И в чем разница между:

unique_ptr<A> a(new A[1]); // - doesn't work
unique_ptr<A> a(new A); // -works
1 4

1 ответ:

Чтобы использовать unique_ptr с выделением массива, необходимо использовать его специализацию:

unique_ptr<A[]> a(new A[5]);