2015-12-18 20 views
12

C++內存分配運算符的格式爲operator new (size_t s)。當我爲類型爲T的類對象過載new運算符時,是否保證運算符new的輸入參數(即size_t s)正好是sizeof(T)?如果是的話,爲什麼這個函數仍然需要大小作爲輸入參數?重載C++新運算符時的大小信息

+0

這不是我的領域,但[this](http://en.cppreference.com/w/cpp/memory/new/operator_new)可能會有幫助。 – hargasinski

回答

13

可以在基類中重寫operator new並使用它來分配派生類類型的對象。

struct Base 
{ 
    void* operator new (size_t s) { ... } 
    int a; 
}; 

struct Derived : public Base 
{ 
    int b; 
}; 

Derived* d = new Derived; 

當分配爲Derived存儲器,Base::operator new(size_t)將被使用。參數的值將是sizeof(Derived)。沒有這個參數,我們不能爲Derived類型的對象分配適量的內存。