Невозможно создать экземпляры объекта de novo , если единственными доступными не удаленными конструкторами объекта являются конструкторы копирования и перемещения, за одним исключением: объект может поддерживать агрегатную инициализацию.В вашем случае EmptyClass
является агрегатом, поэтому я могу сделать это:
EmptyClass c{}; // doesn't call the default constructor
Чтобы предотвратить это, мы должны сначала объявить конструктор по умолчанию, а , а затем определить его как удаленный:
struct EmptyClass {
EmptyClass();
};
EmptyClass::EmptyClass() = delete;
Это делает EmptyClass
не агрегатом.В этом случае будет невозможно создавать объекты этого типа.