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

标签 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: 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/

相关文章:

C++ map 插入和查找性能和存储开销

C++11 将一个 vector move 到另一个 vector - 将右值引用传递给构造函数

c++ - 固定大小的unordered_map,如何定义?

c++ - 为什么 void_t<> 检测习语不适用于 gcc-4.9?

c++ - 我以前在 c++ 中从未遇到过的奇怪错误,有人知道这是什么意思吗?

c++ - 如何在G++中禁止使用内联函数但从未定义过警告

c++ - 禁用特定包含文件的警告

c++ - 如何在 C++ 中发送二维数组作为引用,然后返回?

c++ - 使用 C 或 C++ 从控制台获取原始输入

g++ - 如何摆脱g++中的 "inline function used but never defined"警告