C ++内存分配运算符的格式为operator new (size_t s)
。当我为类型为new
的类对象重载T
运算符时,它是否保证运算符size_t s
的输入参数(即new
)正好{{1 }}?如果是,为什么这个函数仍然需要大小作为输入参数?
答案 0 :(得分: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
类型的对象分配适当的内存量。