Сгенерированный компилятором код в покрытии кода - PullRequest
1 голос
/ 13 мая 2009

Я использую инструменты покрытия кода Intel в Linux, используя компилятор g ++. Для определенного класса инструмент покрытия показывает на 2/3 дополнительные функции, чем те, которые фактически присутствуют в исходном коде.

Что это за дополнительные функции? Это сгенерированные компилятором функции?

Я исключаю заголовочные файлы из покрытия кода. Мои классы просты с пустыми ctor и dtor.

Я предполагаю, что следующие функции сгенерированы компилятором.

  1. Конструктор копирования
  2. Оператор присваивания
  3. Макрос (не в моем случае)
  4. Механизмы подключения слотов сигналов (например, в компиляторе Qt moc генерирует их)

1 Ответ

1 голос
/ 13 мая 2009

Эта запись в блоге (связанная с отладкой с помощью GDB) объясняет, почему вы видите «лишние» конструкторы.

gcc генерирует два разных тела функции для конструктора. Один - обычный, который строит весь объект, включая все основания. Другой конструирует все, кроме виртуальных базовых классов. Так получилось, что gcc выдает оба конструктора даже для классов, у которых вообще нет виртуальных баз.

...