C ++:重载新调用自动构造对象

时间:2015-09-04 16:38:54

标签: c++

我正在尝试重载new运算符以分配我自己的内存,但我仍然需要构造对象。 这就是为什么我决定通过一个可变参数模板传递参数,以便正确地提供对象的构造函数。

在这个例子中,构造函数被调用两次,我无法解释原因。 似乎重载的new会自动调用构造函数。

Book

2 个答案:

答案 0 :(得分:2)

修复了,没有理由尝试在重载中调用构造函数,该对象将在返回的void *的指向分配内存中构造。

答案 1 :(得分:0)

  

我正在尝试重载new运算符以分配自己的内存,但我仍然需要构造对象。

不,不。 operator new按定义初始化对象。见[expr.new] / 15:

  

创建 T 类型的对象的 new-expression 初始化   该对象如下:

     

- 如果省略 new-initializer ,则对象为   default-initialized(8.5);如果没有执行初始化,则   对象具有不确定的价值。

     

- 否则, new-initializer 将根据以下内容进行解释   用于直接初始化的8.5的初始化规则。

至少,您的重载可能如下所示:

void *operator new(size_t sz)
{
    return ::operator new(sizeof(A));
}

static关键字是可选的。