在一个例子中,我看到了这条线
Thing *pThing = new (getHeap(), getConstraint()) Thing(initval());
没有解释、函数体或类定义。第二个参数是什么意思?
在一个例子中,我看到了这条线
Thing *pThing = new (getHeap(), getConstraint()) Thing(initval());
没有解释、函数体或类定义。第二个参数是什么意思?
这是“放置new
”语法的一个实例。它用于将附加参数传递给自定义内存分配函数。
而这:
Obj* pObj = new Obj;
对应于通过operator new
使用类型的单个参数size_t
和 的值调用来分配新内存sizeof(Obj)
,并在返回的内存位置构造一个新的 Obj 实例,
Obj* pObj = new (param1, param2) Obj;
对应于operator new
用三个参数调用一个,sizeof(Obj)
然后是param1
and param2
,并在custom的返回值指向的内存中构造Obj实例operator new
。
Customoperator new
可以全局定义,也可以隐式定义为静态类成员,在这种情况下,只会考虑分配该类型或派生类型的类实例。
此常见问题解答中有更多方法和原因。