新的第二个参数,c ++

5 c++ new-operator

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

Thing *pThing = new (getHeap(), getConstraint()) Thing(initval());
Run Code Online (Sandbox Code Playgroud)

没有解释,功能体或类定义.第二个参数是什么意思?

CB *_*ley 19

这是'placement new'语法的一个实例.它用于将其他参数传递给自定义内存分配函数.

鉴于此:

Obj* pObj = new Obj;
Run Code Online (Sandbox Code Playgroud)

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

Obj* pObj = new (param1, param2) Obj;
Run Code Online (Sandbox Code Playgroud)

对应于operator new使用三个参数调用一个,sizeof(Obj)然后在param1param2自定义的返回值所指向的内存中构造Obj实例operator new.

自定义operator news可以全局定义,也可以作为隐式静态类成员定义,在这种情况下,它们仅用于分配该类型或派生类型的类实例.

这个FAQ中有更多的方法和主题.