仮想構造関数

673 ワード

1.ベースクラスまたは親クラスの構造関数が虚関数として宣言されると、その子クラスの構造関数は虚関数になります.
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の構造関数が呼び出され、メモリが解放される.