在 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: error: 'class List' has virtual functions and accessible non-virtual destructor
警告信息有效。但是当我构建库时 g++ 从不提示它。有谁知道为什么吗?
最佳答案
警告由 -Wnon-virtual-dtor
选项控制,-Wall
或 -Wextra
中不包含该选项。大概您正在使用不同的警告选项来构建应用程序和库。构建应用程序似乎是在启用 -Wnon-virtual-dtor
的情况下完成的,或者也许是 -Weffc++
选项,其中包括 -Wnon-virtual-dtor
我认为警告是烦人且无用的,-Wdelete-non-virtual-dtor
更有用,因为它只会在您实际尝试删除
时发出警告一个 foo::List*
,并包含在 -Wall
关于c++ - g++ 关于缺少纯虚拟析构函数实现的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27454589/