基类与派生类的析构函数不是继承关系,继承析构里也没声明调用,为什么会自动调用基类析构呢?
光阴似箭催人老,日月如移越少年。
析构函数 の主な機能は、このクラスのインスタンス オブジェクトが不要になったときにクリーンアップすることです (主にメモリ解放)。基类 もクラスであり、オブジェクトを持つこともできるため、基本クラスのデストラクタは、基本クラス内で開かれたメモリの一部をクリーンアップする役割を果たします。
析构函数
基类
つまり、派生类 については、メモリ オーバーヘッドが発生する可能性があるため、派生クラスにもコンストラクターが必要です。基底クラスは基底クラス内のメモリ オーバーヘッドのみを認識し、派生クラスは基底クラスのメモリ オーバーヘッドのみを認識します。派生クラス自体は相互に理解していません。ほとんどの継承関係は、基本クラスの拡張関係に基づいています。
派生类
, したがって、安全性と管理のため、派生クラスのオブジェクトが破棄されると、継承メカニズムは各レベルでデストラクターを階層的に呼び出します。 基类的内部, 有一些是派生类不了解的.
基类的内部, 有一些是派生类不了解的.
各クラスにはデストラクターが 1 つだけあり、コンパイラーはプログラマーの介入なしで選択する方法を知っているため、派生クラスのデストラクターで基本クラスのデストラクターを明示的に呼び出す必要はありません。
さらに、デストラクターとコンストラクターの実行順序もまったく逆です。派生クラス オブジェクトを作成する場合、コンストラクターの実行順序は継承順序と同じです。つまり、基本クラスのコンストラクターは最初に実行され、次に派生クラスが実行されます。 派生クラスのオブジェクトを破棄する場合、デストラクターの実行順序は継承順序と逆になります。つまり、最初に派生クラスのデストラクターが実行され、次に基本クラスのデストラクターが実行されます。
1. 派生クラスのデストラクターは基本クラスのデストラクターのみを呼び出しますが、基本クラスのコンストラクターは呼び出しません。あなたの質問は間違っています! 2. なぜそう呼ばれるのでしょうか?派生クラスは、基本クラス部分と派生クラス部分の 2 つの部分で構成されます。コンパイラは、派生クラスのデストラクターを呼び出すときに、基本クラスのデストラクターを自動的に呼び出すのに役立ちます。この戦略により、基本クラスを完全に無視できます。成し遂げる。さらに便利になりました。
析构函数
の主な機能は、このクラスのインスタンス オブジェクトが不要になったときにクリーンアップすることです (主にメモリ解放)。基类
もクラスであり、オブジェクトを持つこともできるため、基本クラスのデストラクタは、基本クラス内で開かれたメモリの一部をクリーンアップする役割を果たします。つまり、
派生クラスは基本クラスを強化します。派生クラスのインスタンス オブジェクトが基本クラスの破棄時に自動的にそのデストラクターを呼び出さない場合、誰が基本クラスのクリーンアップを行うのでしょうか?派生类
については、メモリ オーバーヘッドが発生する可能性があるため、派生クラスにもコンストラクターが必要です。基底クラスは基底クラス内のメモリ オーバーヘッドのみを認識し、派生クラスは基底クラスのメモリ オーバーヘッドのみを認識します。派生クラス自体は相互に理解していません。ほとんどの継承関係は、基本クラスの拡張関係に基づいています。, したがって、安全性と管理のため、派生クラスのオブジェクトが破棄されると、継承メカニズムは各レベルでデストラクターを階層的に呼び出します。
子供がトラブルに巻き込まれた場合、父親に責任を負わせるべきではありません。同時に、継承関係においては、基本クラスがその責任を負います。基本クラスは派生クラスの役割を持ち、役割分担は明確であり、すべての部門が連携して初めてプログラムをスムーズに実行できます。基类的内部, 有一些是派生类不了解的.
各クラスにはデストラクターが 1 つだけあり、コンパイラーはプログラマーの介入なしで選択する方法を知っているため、派生クラスのデストラクターで基本クラスのデストラクターを明示的に呼び出す必要はありません。
さらに、デストラクターとコンストラクターの実行順序もまったく逆です。
派生クラス オブジェクトを作成する場合、コンストラクターの実行順序は継承順序と同じです。つまり、基本クラスのコンストラクターは最初に実行され、次に派生クラスが実行されます。
派生クラスのオブジェクトを破棄する場合、デストラクターの実行順序は継承順序と逆になります。つまり、最初に派生クラスのデストラクターが実行され、次に基本クラスのデストラクターが実行されます。
1. 派生クラスのデストラクターは基本クラスのデストラクターのみを呼び出しますが、基本クラスのコンストラクターは呼び出しません。あなたの質問は間違っています!
2. なぜそう呼ばれるのでしょうか?派生クラスは、基本クラス部分と派生クラス部分の 2 つの部分で構成されます。コンパイラは、派生クラスのデストラクターを呼び出すときに、基本クラスのデストラクターを自動的に呼び出すのに役立ちます。この戦略により、基本クラスを完全に無視できます。成し遂げる。さらに便利になりました。