2012-02-29 49 views
0

如果我有一個class Base { };class Derived : public Base { };,當我做到以下幾點:內存分配=新派生的()

Base* p = new Derived(); 

多少內存分配給p

+5

想必'的sizeof(衍生)'? – hochl 2012-02-29 13:42:35

+0

p是一個指針。 new Derived創建Derived類型的對象。所以它是sizeof(派生) – UmNyobe 2012-02-29 13:43:42

+0

這功課? (在C++中,表達式不會根據您分配的內容改變含義。) – 2012-02-29 13:52:40

回答

9

儘可能多地存儲Derived對象。

您可以通過sizeof(Derived)獲得字節數。

+2

所以它是微不足道的 – mSO 2012-02-29 13:43:55

2

sizeof(Derived)p所指的地址處。

0

在這種情況下,p將指向內存塊的開始,其中包含一個Derived對象。因此,分配的大小將是sizeof(Derived),指向Base的指針指向那裏。

0

我記得總的尺寸是:sizeof(Derived)。如果將方法標記爲virtual sizeof()也需要考慮指向vtable的指針的4個字節。

所以如果你有

class Base { 
int a; 
} 

sizeof(Derived)將4

class Base { 
int a; 
virtual foo(); 
} 

sizeof(Derived)將在8

+0

4字節開銷是常見的,但也會發生其他值。 C++程序員不需要關心。 'sizeof(Derived)'已經包含了虛擬函數所需的任何開銷。 – MSalters 2012-03-01 09:27:45

+0

對不起,我寫得有點快。爲了清晰起見,我會編輯。 – 2012-03-01 10:11:36