我正在尝试重载new运算符以分配我自己的内存,但我仍然需要构造对象。 这就是为什么我决定通过一个可变参数模板传递参数,以便正确地提供对象的构造函数。
在这个例子中,构造函数被调用两次,我无法解释原因。 似乎重载的new会自动调用构造函数。
Book
答案 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
关键字是可选的。