C++内存分配运算符的形式为operator new (size_t s)
.当我new
为类型的类对象重载运算符时T
,它是否保证size_t s
运算符的输入参数(即)new
确切sizeof(T)
?如果是,为什么这个函数仍然需要大小作为输入参数?
可以在基类中重写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
.