gpt4 book ai didi

c++ - GNU 编译器警告 "class has virtual functions but non-virtual destructor"

转载 作者:IT老高 更新时间:2023-10-28 13:23:16 25 4
gpt4 key购买 nike

我在 C++ 中定义了一个接口(interface),即一个只包含纯虚函数的类。

我想明确禁止接口(interface)的用户通过指向接口(interface)的指针删除对象,所以我为接口(interface)声明了一个 protected 非虚拟析构函数,类似于:

class ITest{
public:
virtual void doSomething() = 0;

protected:
~ITest(){}
};

void someFunction(ITest * test){
test->doSomething(); // ok
// deleting object is not allowed
// delete test;
}

GNU 编译器给我一个警告说:

class 'ITest' has virtual functions but non-virtual destructor

一旦析构函数被保护了,它是虚拟的还是非虚拟的有什么区别?

您认为可以安全地忽略或消除此警告吗?

最佳答案

这或多或少是编译器中的一个错误。请注意,在最新版本的编译器中,不会抛出此警告(至少在 4.3 中不会)。在您的情况下,让析构函数受到保护且非虚拟是完全合法的。

here Herb Sutter 就该主题发表了一篇出色的文章。来自文章:

准则 #4:基类析构函数应该是公共(public)的和虚拟的,或者是 protected 和非虚拟的。

关于c++ - GNU 编译器警告 "class has virtual functions but non-virtual destructor",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/127426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com