2012-05-31 2 views
1

В C++ У меня есть файл заголовка Ih определения абстрактного класса (интерфейс) с пустой виртуального деструктора:C++ пустой интерфейс деструктор в заголовочном файле

class I 
{ 
    public: 

    virtual ~I() {} 
}; 
  • Вопрос 1: Является ли объектный код для пустой деструктор, который будет сгенерирован в объектном файле каждого .cpp-файла, который включает Ih?
  • Вопрос 2: Если ответ на вопрос 1 является да, может ли это быть проблемой (тот же метод в разных объектных файлах)?

ответ

5

Нет, это не будет. Методы, определенные внутри определения класса, автоматически inline, поэтому не нужно беспокоиться об этом.

Обратите внимание, что метод, обозначаемый inline и фактически встроенный в двоичный код, отличается. inline - это всего лишь маркер (подсказка компилятора в лучшем случае). Особенно с функциями virtual. Полиморфизм гарантированно работает независимо от того, отмечены ли методы inline или нет.

+0

Есть ли способ иметь метод, определенный в определении класса, но не встроенный? – Giorgio

+0

@ Джорджио: Нет, нет. Он должен быть встроен, чтобы не нарушать ODR. –

+0

@ Джорджио, насколько я могу вспомнить, стандарт говорит, что метод, определенный внутри класса, является встроенным, поэтому я так не думаю. –

Смежные вопросы