コンストラクション関数は虚関数ですか?どうして?(ある会社の実習生募集面接試験問題)


数年前の実習生の面接で、この問題に出会ったが、最近また人の話を聞いたので、簡単に話した.まず簡単なコードを見てみましょう.
#include 
using namespace std;

class A
{
public:
	virtual void fun()
	{
	
	}
};

int main()
{
	cout << sizeof(A) << endl; // 4

	return 0;
}

上記のプログラムの結果が4であるのは,虚関数ポインタがおかしいからである.次に続けてみましょう.
#include 
using namespace std;

class A
{
public:
	virtual A() // error
	{
	
	}
};

int main()
{
	return 0;
}

構造関数は虚関数ではないことがわかります.なぜですか.コンストラクション関数を呼び出すと、オブジェクトが生成されることを知っています.コンストラクション関数が虚関数であると仮定すると、虚関数数テーブルに存在し、虚関数テーブルを探すには虚関数ポインタが必要であり、虚関数ポインタがオブジェクトに存在すると矛盾します.今はオブジェクトが生成されていません.何の虚関数ポインタがありますか.
前述したように、コンストラクション関数は絶対に虚関数ではありません.このような問題は、実際にはC++の基本的な知識に対する考察であり、子供靴の皆さんは、今度会うともう恐れる必要はありません.