【解決方法】デストラクターに仮想キーワードを追加すると、どのように動作しますか?


こんにちは、実際に仮想概念を学ぼうとしていますが、問題は、クラスデストラクターに仮想キーワードを追加するときに仮想概念がどのように機能するかということです。

class A
{
   public:
      int a1;
      int b1;

      A()   {  cout<<"A's Constructor\n"; }

      virtual void foo()
      {
         cout<<"Base : foo\n";
      }

      //~A()  {  cout<<"A's Destructor\n";  }
      virtual ~A()  {  cout<<"A's Destructor\n";  }
};

class B : public A
{
   public:
      B()   {  cout<<"B's Constructor\n"; }

      void foo()
      {
         cout<<"Dervied : foo\n";
      }

      ~B()  {  cout<<"B's Destructor\n";  }
};

int main()
{
   A* a1 = new A();
   cout<<"------------------Another------------------\n";
   A* a2 = new B();
   cout<<"------------------Another------------------\n";
   B* b1 = new B();
   cout<<"------------------D-->a1  Another------------------\n";
   delete a1;
   cout<<"------------------D-->a2  Another------------------\n";
   delete a2;
   cout<<"------------------D-->b1  Another------------------\n";
   delete b1;
}

どのようにして、a2 オブジェクトの削除がデストラクターを呼び出すのでしょうか?

私が試したこと:

v-table フロー制御を見てデストラクターの概念を学ぼうとしています

解決策 1

ポリモーフィズムがそのように機能するためです。 たとえば、次を参照してください。 C++ ポリモーフィズム[^]。

コメント

タイトルとURLをコピーしました