在一个示例中,我看到了这行代码。
Thing *pThing = new (getHeap(), getConstraint()) Thing(initval());
没有解释,函数体或类定义。第二个参数是什么意思?
Thing *pThing = new (getHeap(), getConstraint()) Thing(initval());
没有解释,函数体或类定义。第二个参数是什么意思?
这是“定位new
”语法的一个实例,它用于向自定义内存分配函数传递附加参数。
而这个:
Obj* pObj = new Obj;
通过使用单个类型为size_t
和sizeof(Obj)
的参数来调用operator new
分配新内存,并在返回的内存位置上构造一个新的Obj实例。
Obj* pObj = new (param1, param2) Obj;
调用自定义的operator new
,需要三个参数:sizeof(Obj)
、param1
和param2
,在operator new
返回的指向对象实例内存的指针中构造Obj
实例。
自定义的operator new
可以全局定义,也可以作为隐式静态类成员定义,这种情况下它们只会被考虑用于分配该类型或派生类型的类实例。
有关更多细节和原因,请参考此FAQ。