我在 C++ 中定义了一个接口,即一个只包含纯虚函数的类。
我想明确禁止接口的用户通过指向接口的指针删除对象,所以我为接口声明了一个受保护的非虚拟析构函数,例如:
class ITest{
public:
virtual void doSomething() = 0;
protected:
~ITest(){}
};
void someFunction(ITest * test){
test->doSomething(); // ok
// deleting object is not allowed
// delete test;
}
GNU 编译器给我一个警告说:
类“ITest”具有虚函数但非虚析构函数
一旦析构函数受到保护,将其设为虚拟或非虚拟有什么区别?
您认为可以安全地忽略或消除此警告吗?