Почему создаётся объект не имеющий конструкторов вообще?
Почему можно создать создать объект с удаленным конструктором, если описание класса имеет такую форму:
class MyClass
{
public:
MyClass()=delete;
int a;
};
MyClass a{1}; //все хорошо
А если класс имеет такую форму:
class MyClass
{
int a;
public:
MyClass()=delete;
};
MyClass a; //ошибка
То компилятор выбивает ошибку.
Попробую предложить, что все дело тут в агрегатной инициализации, но неужели она может полностью заменить конструктор? Объясните пожалуйста.
Ответы (1 шт):
Автор решения: αλεχολυτ
→ Ссылка
Поведение приведённого кода будет отличаться в зависимости от используемого стандарта языка. До C++20 удаление конструктора через =delete не отменяло возможности агрегатной инициализации. В C++20 это уже запрещено. По этому поводу имеется соответствующий документ P1008R1. Связанный ответ на enSO.