如果我有一個class Base { };
和class Derived : public Base { };
,當我做到以下幾點:內存分配=新派生的()
Base* p = new Derived();
多少內存分配給p
?
如果我有一個class Base { };
和class Derived : public Base { };
,當我做到以下幾點:內存分配=新派生的()
Base* p = new Derived();
多少內存分配給p
?
sizeof(Derived)
在p
所指的地址處。
在這種情況下,p
將指向內存塊的開始,其中包含一個Derived
對象。因此,分配的大小將是sizeof(Derived)
,指向Base
的指針指向那裏。
我記得總的尺寸是:sizeof(Derived)。如果將方法標記爲virtual
sizeof()也需要考慮指向vtable的指針的4個字節。
所以如果你有
class Base {
int a;
}
sizeof(Derived)
將4
class Base {
int a;
virtual foo();
}
sizeof(Derived)
將在8
4字節開銷是常見的,但也會發生其他值。 C++程序員不需要關心。 'sizeof(Derived)'已經包含了虛擬函數所需的任何開銷。 – MSalters 2012-03-01 09:27:45
對不起,我寫得有點快。爲了清晰起見,我會編輯。 – 2012-03-01 10:11:36
想必'的sizeof(衍生)'? – hochl 2012-02-29 13:42:35
p是一個指針。 new Derived創建Derived類型的對象。所以它是sizeof(派生) – UmNyobe 2012-02-29 13:43:42
這功課? (在C++中,表達式不會根據您分配的內容改變含義。) – 2012-02-29 13:52:40