#include<iostream>
using namespace std;
class A
{
public:
int i;
A() {cout<<"A()"<<endl;}
~A() {cout<<"~A()"<<endl;}
};
class B:public A
{
public:
int j;
B(): j(10)
{
this->i=20;
this->~A();
}
};
int main()
{
B abc;
cout<<"i="<<abc.i<<" j="<<abc.j<<endl;
}//main
2つの質問:
- オブジェクトを破棄するのではなく、なぜAのデストラクタが通常の関数のように呼び出されるのですか?(または、子クラスのデストラクタが基本クラスのデストラクタを呼び出した場合にのみ基本クラスが破棄されるというのは、ある種のルールですか?)このサンプルコードを試して、デストラクタがどのように機能するかを調べました。したがって、デストラクタ関数を呼び出してもオブジェクトが破棄されない場合は、デストラクタを呼び出す他の種類の呼び出しが明らかに存在し、その場合にのみオブジェクトが破棄されます。そのような電話の何がそんなに特別なのか、そしてそれは何の電話なのか?
BのコンストラクターにAの初期化リストを作成する方法はありますか?このようなもの:
class B:public A { B(): j(10), A():i(20) {} };