在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 ++从不抱怨它。有谁知道为什么?
答案 0 :(得分:1)
警告由-Wnon-virtual-dtor
选项控制,该选项未包含在-Wall
或-Wextra
中。据推测,您正在使用不同的警告选项来构建应用程序和库。构建应用程序似乎是在启用-Wnon-virtual-dtor
的情况下完成的,或者是包含-Weffc++
的{{1}}选项
我认为该警告令人烦恼且无用,-Wnon-virtual-dtor
更有用,因为它只会警告您是否真的尝试-Wdelete-non-virtual-dtor
delete
,并且foo::List*
中包含-Wall
1}}