Виртуальный деструктор для чисто абстрактных базовых классов - PullRequest
0 голосов
/ 17 ноября 2018

Я видел здесь и здесь , что хорошим практическим правилом является использование виртуальных деструкторов для каждого класса, который предназначен в качестве базового класса.У меня есть чистый абстрактный базовый класс (содержит только чисто виртуальные функции и не содержит членов данных; предназначен для использования в качестве интерфейса).

class A {
    public:
        virtual void foo() = 0;
};

Можно ли добавить виртуальный деструктор в этот класс, не создаваяфайл реализации (этот класс определен в заголовочном файле, включенном в несколько файлов .cpp) только для пустого деструктора, при этом избегая предупреждений clang и g ++, таких как -Wweak-vtables?Я не могу поместить пустое определение в заголовочный файл с чистым абстрактным классом, потому что я получу несколько определений деструктора.

1 Ответ

0 голосов
/ 17 ноября 2018

Принимая во внимание, что clang выдает предупреждение для:

class A {
public:
    virtual ~A() {}
    virtual void foo() = 0;
};

использование = default не вызывает его.

class A {
public:
    virtual ~A() = default;
    virtual void foo() = 0;
};

Даже если оба действительны.

Демо

...