新的第二个参数,C++。

5
在一个示例中,我看到了这行代码。
Thing *pThing = new (getHeap(), getConstraint()) Thing(initval());

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


你确定你输入正确了吗?似乎没有一个变量来接收new的结果。 - Steve Rowe
我认为应该是“Thing *pThing = new (getHeap(), getConstraint()) Thing(initval());”。这来自于C++陷阱中的第14条。 - CTT
谢谢,CTT。现在我明白了。 - David Thornley
是的 CTT ,那确实是我得到它的地方,现在我旁边有这本书,确切地说就是这样写的。 - user34537
1个回答

19

这是“定位new”语法的一个实例,它用于向自定义内存分配函数传递附加参数。

而这个:

Obj* pObj = new Obj;

通过使用单个类型为size_tsizeof(Obj)的参数来调用operator new分配新内存,并在返回的内存位置上构造一个新的Obj实例。

Obj* pObj = new (param1, param2) Obj;

调用自定义的operator new,需要三个参数:sizeof(Obj)param1param2,在operator new返回的指向对象实例内存的指针中构造Obj实例。

自定义的operator new可以全局定义,也可以作为隐式静态类成员定义,这种情况下它们只会被考虑用于分配该类型或派生类型的类实例。

有关更多细节和原因,请参考此FAQ


一个完美无瑕的答案 - 无可添加或删除。 - Arafangion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接