关于缺少纯虚析构函数实现的g ++警告

时间:2014-12-13 01:29:36

标签: c++ g++

在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:错误:'班级列表'具有虚函数和可访问的非虚析构函数

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

1 个答案:

答案 0 :(得分:1)

警告由-Wnon-virtual-dtor选项控制,该选项未包含在-Wall-Wextra中。据推测,您正在使用不同的警告选项来构建应用程序和库。构建应用程序似乎是在启用-Wnon-virtual-dtor的情况下完成的,或者是包含-Weffc++的{​​{1}}选项

我认为该警告令人烦恼且无用,-Wnon-virtual-dtor更有用,因为它只会警告您是否真的尝试-Wdelete-non-virtual-dtor delete,并且foo::List*中包含-Wall 1}}