5

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

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

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

4

1 回答 1

19

这是“放置new”语法的一个实例。它用于将附加参数传递给自定义内存分配函数。

而这:

Obj* pObj = new Obj;

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

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

对应于operator new用三个参数调用一个,sizeof(Obj)然后是param1and param2,并在custom的返回值指向的内存中构造Obj实例operator new

Customoperator new可以全局定义,也可以隐式定义为静态类成员,在这种情况下,只会考虑分配该类型或派生类型的类实例。

此常见问题解答中有更多方法和原因。

于 2009-02-25T22:19:05.927 回答