新的第二个参数,c ++

时间:2009-02-25 22:15:30

标签: c++ new-operator

在一个例子中,我看到了这一行

Thing *pThing = new (getHeap(), getConstraint()) Thing(initval());

没有解释,功能体或类定义。第二个参数是什么意思?

1 个答案:

答案 0 :(得分:19)

这是'placement new'语法的一个实例。它用于将其他参数传递给自定义内存分配函数。

鉴于此:

Obj* pObj = new Obj;

对应于通过使用类型operator new的单个参数和size_t的值调用sizeof(Obj)来分配新内存,并在返回的内存位置构建新的Obj实例,

Obj* pObj = new (param1, param2) Obj;

对应于使用三个参数调用operator newsizeof(Obj)后跟param1param2并在内存中构造Obj实例,返回值由自定义operator new

自定义operator new可以全局定义,也可以作为隐式静态类成员定义,在这种情况下,它们仅用于分配该类型或派生类型的类实例。

this FAQ中有更多的方法和原因。