幾種類的sizeof

struct s1
{

};

struct s2
{
	void f(){ cout << "void f()" << endl; }
};

class c0
{

};

class c1
{
public:
	virtual void f(int){ cout << "virtual void f()" << endl; }
	void g(int){ cout << "void g()" << endl; }
};

class c2 : public c1
{
public:
	void f(int){ cout << "void f()" << endl; }
};

class c3 : public c2
{
public:
private:
	int a;
};

class c4
{
private:
	int a;
};

class c5
{
public:
	void f(){ cout << "void f()" << endl; }
private:
	int a;
};

class c6
{
public:
	virtual void f(){ cout << "virtual void f()" << endl; }
	virtual void g(){ cout << "virtual void g()" << endl; }
};


在sizeof(s1-2/c0-6)後的結果是111448444,上網查證了一下是這麼個回事

必須要用缺省1byte來使得空類在不同的地址,而每個類維護了一個虛函數表(有虛函數的話),因此需要一個指針,但是如果一個類繼承自N個類,每個類都有虛函數的話,那麼這個類的sizeof就==對齊後的字節數+N*4,再者,如果這個類又定義了虛函數,那麼再加4就是了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章