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

时间:2015-12-18 06:05:25

标签: c++ operator-overloading new-operator

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

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类型的对象分配适当的内存量。