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/