【问题标题】:Size information when overloading C++ new operator重载 C++ 新运算符时的大小信息
【发布时间】:2016-03-24 19:06:24
【问题描述】:
C++ 内存分配运算符的格式为operator new (size_t s)。当我为T 类型的类对象重载new 运算符时,它是否保证运算符new 的输入参数(即size_t s)恰好是sizeof(T)?如果是,为什么这个函数仍然需要大小作为输入参数?
【问题讨论】:
标签:
c++
operator-overloading
new-operator
【解决方案1】:
可以在基类中重写 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 类型的对象分配正确的内存量。