Если у меня есть класс, определенный как
class A {
protected:
~A(){ }
};
то я могу динамически выделять отдельную группу, а также массив таких объектов, как
A* ptr1 = new A;
A* ptr2 = new A[10];
Однако, когда я определяю конструктор для этого класса
class A {
public:
A(){}
protected:
~A(){ }
};
то я могу создать отдельные объекты с помощью
A* ptr = new A;
но когда я пытаюсь динамически выделять массив объекта с помощью
A* ptr = new A[10];
Компилятор (gcc-5.1 и Visual Studio 2015) начинает жаловаться, что A:: ~ A() недоступен.
Может ли кто-нибудь объяснить: -
1- Почему разница в поведении с конструктором определяется и не определена.
2- Когда конструктор определен, почему мне разрешено создавать отдельный объект, а не массив объекта.