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' には仮想関数がありますが、非仮想デストラクタがあります
デストラクタが保護されると、仮想化または非仮想化の違いは何ですか?
この警告は安全に無視したり黙らせたりできると思いますか?