重载C++ new运算符时的大小信息

Jes*_*Jes 12 c++ operator-overloading new-operator

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

R S*_*ahu 13

可以在基类中重写operator new,并使用它来分配派生类类型的对象.

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

struct Derived : public Base
{
   int b;
};

Derived* d = new Derived; 
Run Code Online (Sandbox Code Playgroud)

分配内存时Derived,Base::operator new(size_t)将使用.参数的值将是sizeof(Derived).如果没有该参数,我们就无法为类型的对象分配适当的内存量Derived.