在一个例子中,我看到了这一行
Thing *pThing = new (getHeap(), getConstraint()) Thing(initval());
没有解释,功能体或类定义。第二个参数是什么意思?
答案 0 :(得分:19)
这是'placement new
'语法的一个实例。它用于将其他参数传递给自定义内存分配函数。
鉴于此:
Obj* pObj = new Obj;
对应于通过使用类型operator new
的单个参数和size_t
的值调用sizeof(Obj)
来分配新内存,并在返回的内存位置构建新的Obj实例,
Obj* pObj = new (param1, param2) Obj;
对应于使用三个参数调用operator new
,sizeof(Obj)
后跟param1
和param2
并在内存中构造Obj实例,返回值由自定义operator new
。
自定义operator new
可以全局定义,也可以作为隐式静态类成员定义,在这种情况下,它们仅用于分配该类型或派生类型的类实例。
this FAQ中有更多的方法和原因。