C ++のコンストラクタは、仮想できない理由

1.ストレージ空間角度:仮想関数のvtableに対応し、メモリに格納されたオブジェクトのvtable

コンストラクタが仮想である場合は、vtableを介してコールする必要があり、オブジェクトがインスタンス化されていない場合、そのメモリは決してありません、vtableのを見つけることができません

2.角度:仮想関数は、主に不完全な情報の場合に使用され、オーバーロード関数は、対応する呼び出しを得ることができます。

仮想関数の使用は、実用的な意味ではないこと、インスタンス自体を初期化するコンストラクタ

、およびコンストラクタの役割は、対象の一生に一度だけ実行される初期化を提供することであり、(サブクラスは、親クラスのコンストラクタが起動しますので)3.ビューの意味の実用的な観点からは、Shihaiと呼ばれ、コンストラクタ内のオブジェクトの真のタイプを判断することはできません動的挙動は、仮想関数であるために多くの必要がありませんが、オブジェクトではありません

おすすめ

転載: www.cnblogs.com/sylar5/p/11525113.html