【问题标题】: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)?如果是,为什么这个函数仍然需要大小作为输入参数?

【问题讨论】:

  • 这不是我的领域,但this 可能会有所帮助。

标签: 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 类型的对象分配正确的内存量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    相关资源
    最近更新 更多