Qubc
@Qubc
Ненавижу полисемию.

Почему компилятор не генерирует конструктор по умолчанию в отдельной единице трансляции?

Судя по листингам .s A::A() нигде нет, но хочется уточнить причину.
Компилятор не создает A::A() внутри a.cpp потому что там нет явного определения объекта типа A или указания = default. А почему компилятор не создаёт A::A() внутри main.cpp?

A.h :
#pragma once 
class A{
public:
    virtual void function1 ();
    virtual ~A ();
};


-fno-elide-constructors g++ (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0
A.cpp :
#include "A.h"
virtual void A::function1 (){ }
virtual  A::~A(){  }


main.cpp :
#include "A.h"
int main(){
    A a;
    a.function1();
}
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Почему компилятор не генерирует конструктор

потому что нигде не написано, что он должен? Я вижу, что в коде генерируемом gcc инициализация таблицы виртуальных функций инлайнится по месту создания объекта, вне зависимости от опций оптимизации.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы