Класс C++ имеет 4 основные функции: конструктор, деструктор, конструктор копирования и оператор присваивания. Предполагается, что вы определяете их явно, но если вы этого не сделаете, компилятор сгенерирует их за вас. Но, как говорит Скотт Мейер, компилятор будет генерировать их только в случае необходимости. Есть много условий, но, например, если класс можно копировать побитно, компилятор не будет генерировать конструктор копирования.
Итак, если у меня есть пустой класс, как это:
class A {};
Я бы предположил, что компилятор не будет генерировать никаких функций для этого. У меня есть пара вопросов:
Как увидеть сгенерированные компилятором функции? Например, я могу видеть свои функции в таблице символов класса, вызывая nm в объектном файле. В таблице символов, хотя имена искажены, я могу четко идентифицировать объявленные функции. Но я не вижу никаких конструкторов и т.д. Как мне увидеть функции, которые генерируются компилятором?
Что значит создать экземпляр пустого класса? Я знаю, что С++ выделяет память 1 пустым классам, чтобы каждый экземпляр имел уникальный адрес. Но если нет конструктора, сгенерированного компилятором по умолчанию, что это значит:
А а1 = А(); A *a1ptr = новый A();
Или это должно быть
A a2 = A;
Ваше здоровье