仮想構造関数
673 ワード
1.ベースクラスまたは親クラスの構造関数が虚関数として宣言されると、その子クラスの構造関数は虚関数になります.
2.構造関数が虚関数であるかどうかにかかわらず、サブクラスオブジェクトが取り消されると、親クラスの構造関数が自動的に呼び出されます.
3,親クラスまたはベースクラスを虚関数として宣言する目的は,多態性,すなわち晩バインドを実現することである.
例:
ポインタpbが取り消されると、childクラスの構造関数(静的アセンブリ)を呼び出さずにbaseクラスの構造関数が呼び出される.childクラスでメモリが動的に申請された場合、childクラスの構造関数が呼び出されなかったため、メモリが解放されず、メモリが漏洩した.したがって、ベースクラスbaseではその構造関数を虚関数として宣言し、その派生クラスの構造関数も自動的に虚関数になります.このときポインタpbを取り消すと、マルチステート特性のため、遅いバインドが実現され、サブクラスchildの構造関数が呼び出され、メモリが解放される.
2.構造関数が虚関数であるかどうかにかかわらず、サブクラスオブジェクトが取り消されると、親クラスの構造関数が自動的に呼び出されます.
3,親クラスまたはベースクラスを虚関数として宣言する目的は,多態性,すなわち晩バインドを実現することである.
例:
class base
{
public:
base(){}
~base(){}
}
class child : public base
{
public:
child(){}
~child(){}
}
int main()
{
base* pb;
child c;
pb = &c;
}
ポインタpbが取り消されると、childクラスの構造関数(静的アセンブリ)を呼び出さずにbaseクラスの構造関数が呼び出される.childクラスでメモリが動的に申請された場合、childクラスの構造関数が呼び出されなかったため、メモリが解放されず、メモリが漏洩した.したがって、ベースクラスbaseではその構造関数を虚関数として宣言し、その派生クラスの構造関数も自動的に虚関数になります.このときポインタpbを取り消すと、マルチステート特性のため、遅いバインドが実現され、サブクラスchildの構造関数が呼び出され、メモリが解放される.