在一个例子中,我看到了这一行
Thing *pThing = new (getHeap(), getConstraint()) Thing(initval());
没有解释,功能体或类定义.第二个参数是什么意思?
这是'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
s可以全局定义,也可以作为隐式静态类成员定义,在这种情况下,它们仅用于分配该类型或派生类型的类实例.
这个FAQ中有更多的方法和主题.