Я использую С++ 11 и g++ 4.8 в Ubuntu Trusty.
Рассмотрим этот фрагмент
class Parent {
public:
virtual ~Parent() = default;
virtual void f() = 0;
};
class Child: public Parent {
public:
void f(){}
};
Вызывается с помощью
{
Child o;
o.f();
}
{
Parent * o = new Child;
delete o;
}
{
Child * o = new Child;
delete o;
}
Я использую gcov для создания отчета о покрытии кода. Сообщается, что деструктор с символом _ZN6ParentD0Ev
никогда не вызывается, а _ZN6ParentD2Ev
-.
Ответ Двойное выделение символов конструктора и GNU GCC (g++): Почему он генерирует несколько dtors? сообщает, что _ZN6ParentD0Ev
является конструктором удаления.
Есть ли случай, когда этот "удаляющий деструктор" вызывается в классе Parent
?
Вспомогательный вопрос: если нет, есть ли способ получить инструмент покрытия кода gcov/lcov (используется следующий ответ Подробное руководство по использованию gcov с CMake/CDash?) игнорировать этот символ в своем отчете?