12
C++內存分配運算符的格式爲operator new (size_t s)
。當我爲類型爲T
的類對象過載new
運算符時,是否保證運算符new
的輸入參數(即size_t s
)正好是sizeof(T)
?如果是的話,爲什麼這個函數仍然需要大小作爲輸入參數?重載C++新運算符時的大小信息
C++內存分配運算符的格式爲operator new (size_t s)
。當我爲類型爲T
的類對象過載new
運算符時,是否保證運算符new
的輸入參數(即size_t s
)正好是sizeof(T)
?如果是的話,爲什麼這個函數仍然需要大小作爲輸入參數?重載C++新運算符時的大小信息
可以在基類中重寫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
類型的對象分配適量的內存。
這不是我的領域,但[this](http://en.cppreference.com/w/cpp/memory/new/operator_new)可能會有幫助。 – hargasinski