【问题标题】:g++ warning about missing imlementation of pure virtual destructor关于缺少纯虚拟析构函数实现的 g++ 警告
【发布时间】:2014-12-13 01:29:36
【问题描述】:

在 CentOS 6.5 中,我有一个类 List 像:

// list.hpp

namespace foo
{
    class List
    {
    public:
        virtual int reserveMem ( int size) = 0;
        virtual int Insert ( int val) = 0;
        virtual int Find ( int val) = 0;
        virtual bool Empty() = 0;
    };
}

它是共享库源代码的一部分。而且我可以使用 g++(版本 4.4.7)构建整个库而不会出现任何错误或警告消息。使用的编译标志是

-g -fPIC -Wall -Wextra -Werror

然后我们有另一个应用程序,它只包含一个头文件,其中包含这个头文件并得到:

list.hpp:14: 错误:'class List' 具有虚函数和可访问的非虚析构函数

警告信息有效。但是当我构建库时,g++ 从不抱怨它。有谁知道为什么?

【问题讨论】:

  • 因为你从未创建过 List 类型的对象,我猜
  • 为你的类定义一个虚拟析构函数,它就会消失。虚拟 ~List() {}
  • 你的问题标题很误导人,警告与纯虚析构函数无关

标签: c++ g++


【解决方案1】:

警告由-Wnon-virtual-dtor 选项控制,该选项不包含在-Wall-Wextra 中。大概您正在使用不同的警告选项来构建应用程序和库。构建应用程序似乎是在启用 -Wnon-virtual-dtor 的情况下完成的,或者可能是 -Weffc++ 选项,其中包括 -Wnon-virtual-dtor

我认为该警告令人讨厌且无益,-Wdelete-non-virtual-dtor 更有用,因为它仅在您实际尝试 deletefoo::List* 时发出警告,并且包含在 -Wall

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-03
    • 2015-10-18
    • 1970-01-01
    • 2018-07-20
    • 2016-01-22
    • 2017-05-01
    • 2011-03-03
    • 2014-02-02
    相关资源
    最近更新 更多