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

最佳答案

可以在基类中重写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类型的对象分配适当的内存量。

关于c++ - 重载C++ new运算符时的大小信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34349407/

10-11 22:54
查看更多