私は、プライベート (そしてもちろんパブリック) デストラクタの使用を認識しています。
また、派生クラスでの保護されたデストラクタの使用についても認識しています。
保護されたデストラクタを使用して、基本クラス ポインターを介した派生オブジェクトの破棄を防止します。
しかし、次のコードを実行しようとしましたが、コンパイルされません。
struct A{
int i;
A() { i = 0;}
protected: ~A(){}
};
struct B: public A{
A* a;
B(){ a = new A();}
void f(){ delete a; }
};
int main()
{
B b= B();
b.f();
return 0;
}
私は得る:
void B::f()':
main.cpp:9:16: error: 'A::~A()' is protected
私は何が欠けていますか?
f() 内から A の保護されたメソッドを呼び出すと、機能します。では、なぜd'torの呼び方が違うのでしょうか?