Идентификация сгенерированных компилятором функций в классе

Класс C++ имеет 4 основные функции: конструктор, деструктор, конструктор копирования и оператор присваивания. Предполагается, что вы определяете их явно, но если вы этого не сделаете, компилятор сгенерирует их за вас. Но, как говорит Скотт Мейер, компилятор будет генерировать их только в случае необходимости. Есть много условий, но, например, если класс можно копировать побитно, компилятор не будет генерировать конструктор копирования.

Итак, если у меня есть пустой класс, как это:

class A {};

Я бы предположил, что компилятор не будет генерировать никаких функций для этого. У меня есть пара вопросов:

  1. Как увидеть сгенерированные компилятором функции? Например, я могу видеть свои функции в таблице символов класса, вызывая nm в объектном файле. В таблице символов, хотя имена искажены, я могу четко идентифицировать объявленные функции. Но я не вижу никаких конструкторов и т.д. Как мне увидеть функции, которые генерируются компилятором?

  2. Что значит создать экземпляр пустого класса? Я знаю, что С++ выделяет память 1 пустым классам, чтобы каждый экземпляр имел уникальный адрес. Но если нет конструктора, сгенерированного компилятором по умолчанию, что это значит:

    А а1 = А(); A *a1ptr = новый A();

Или это должно быть

A a2 = A;

Ваше здоровье


person madu    schedule 14.10.2014    source источник
comment
Предполагается, что вы должны определить их явно. Обычно вам не нужно этого делать.   -  person juanchopanza    schedule 14.10.2014
comment
comment
Возможно, следует задать следующий вопрос: когда мне нужно создавать функции, генерируемые другим компилятором?   -  person Thomas Matthews    schedule 14.10.2014
comment
Спасибо вам, ребята. Но мне все еще не ясно, что значит создать экземпляр пустого класса без каких-либо функций, сгенерированных компилятором? Кроме того, если есть сгенерированные компилятором, как я могу увидеть, какие из них сгенерированы, например, в таблице символов.   -  person madu    schedule 14.10.2014
comment
@madu - я дал вам +1 некоторое время назад, и я продолжаю пересматривать. ', надеясь, что кто-то сможет дать хороший ответ, который не прибегает к тонне разборки и обратного проектирования. Мы знаем, что должно быть сгенерировано, но было бы неплохо проверить это легко.   -  person Jeff    schedule 31.10.2014