在基类中虚拟析构函数的实用性

时间:2019-05-22 12:59:05

标签: c++ c++17 virtual destructor virtual-destructor

让我们举个例子:

    /* Source.cpp */

    struct Base {
        virtual void func() = 0;
    };

    struct Derived : public Base {
        virtual void func() override { }
    };

    int main() {
        return 0;
    }

在通过g++ Source.cpp -Wnon-virtual-dtor进行编译(在g ++ 8.3.0上)时,我们得到了:

    Source.cpp:2:8: warning: 'struct Base' has virtual functions and accessible non-virtual destructor [-Wnon-virtual-dtor]
     struct Base {
            ^~~~
    Source.cpp:6:8: warning: base class 'struct Base' has accessible non-virtual destructor [-Wnon-virtual-dtor]
     struct Derived : public Base {
            ^~~~~~~
    Source.cpp:6:8: warning: 'struct Derived' has virtual functions and accessible non-virtual destructor [-Wnon-virtual-dtor]


要做的实用是什么?

  • virtual ~Base() = default;添加到每个此类Base中以消除警告(不利的是,我们正在添加样板代码,该代码本来就似乎什么也没做)。
  • 还是有一个参数要删除-Wnon-virtual-dtor并保持代码不变? (缺点是我们可能允许内存泄漏,还是我们)
  • 我猜值得问的一个问题是,如果类具有虚拟成员,编译器为什么不创建虚拟默认析构函数

0 个答案:

没有答案
相关问题