В книге "Эффективный С++" я увидел прохождение ниже:
В результате, если вы пишете
class Empty{};
он по существу такой же, как если бы вы написали это:
class Empty { public: Empty() { ... } Empty(const Empty& rhs) { ... } ~Empty() { ... } Empty& operator=(const Empty& rhs) { ... } // copy assignment operator };
Следующий код вызовет создание каждой функции:
Empty e1; Empty e2(e1); e2 = e1;
Но после разборки исполняемого файла, который был создан путем компиляции вышеприведенного кода, я понял, что это не так: никакой функции не вызывается.
Вот основной код сборки:
00000000004006cd <main>:
4006cd: 55 push %rbp
4006ce: 48 89 e5 mov %rsp,%rbp
4006d1: b8 00 00 00 00 mov $0x0,%eax
4006d6: 5d pop %rbp
4006d7: c3 retq
В сегменте .text
нет функции с именем "Пусто".
Тогда каково поведение компилятора после вызова конструктора или назначения пустого класса? Создает ли он некоторые функции, как говорила книга? Если да, то где они хранятся?