私は基本的で簡単な質問があります。内部クラスのデストラクタは、基本クラスのデストラクタの後に呼び出されます
私は、このシナリオがあります。
#include <iostream>
using namespace std;
class Inner1
{
public:
~Inner1() {cout << "Inner1 Des\n";};
};
class Inner2
{
public:
~Inner2() {cout << "Inner2 Des\n";};
};
class Base
{
public:
~Base() {cout << "Base Des\n";};
Inner1 inner1;
Inner2 inner2;
};
int main() {
Base base;
return 0;
}
をそして、私のコンソールには、今、この私に語った:
はと呼ばれる
Inner1デストラクタと呼ばれる
Inner2デストラクタと呼ばれる
ベースデストラクタをこれは正常な行動ですか?いくつかの関数
の機能は、私のベースクラスのデストラクタで既に破壊されているため、内部クラスは に依存しています。推奨しない回避策:
ちょうど最初の位置にオブジェクトを "デストロイヤー" クラスを追加します。
[...] class Base { public: ~Base() {cout << "Base Des\n";}; class Destroyer { ~Destroyer() { //Put the stuff here because this destr will be called last cout << "Destroyer Des\n"; } } _destroyer; Inner1 inner1; [...]
は、このコードを使用してあなたの助け
これらのメッセージを生成するコードを表示する必要があります。さもなければ、我々はその行動をちょうど推測している。 –
これはサブクラスではなく内部クラスです。サブクラス化は継承を意味します。 _その後、派生したクラスのdtorsは、基本クラスのデストラクタの前に呼び出されます。 – Albjenow
これらのメッセージはすべてのデストラクタに追加された標準的なcoutメッセージです。何も特別なものはありません。ちょうどこのシナリオと標準のC + +について私はそれが私の他のコードとtodoは何もないと思う。 – Coda