在一个例子中,我看到了这一行
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)然后在param1和param2自定义的返回值所指向的内存中构造Obj实例operator new.
自定义operator news可以全局定义,也可以作为隐式静态类成员定义,在这种情况下,它们仅用于分配该类型或派生类型的类实例.
这个FAQ中有更多的方法和主题.