2009-02-25 22 views
5

en un ejemplo que vi esta líneanuevo segundo parámetro, C++

Thing *pThing = new (getHeap(), getConstraint()) Thing(initval()); 

No hubo ninguna explicación, cuerpo de una función o una clase de definición. ¿Qué significa el segundo parámetro?

+0

¿Estás seguro de que has escrito correctamente? No parece haber una variable para aceptar el resultado de nuevo. –

+0

Creo que se suponía que era "Thing * pThing = new (getHeap(), getConstraint()) Thing (initval());". Es de # 14 en C++ gotchas – CTT

+0

Gracias, CTT. Ahora tiene sentido. –

Respuesta

19

Es una instancia de la sintaxis 'ubicación new'. Es para pasar parámetros adicionales a una función de asignación de memoria personalizada.

Considerando que la presente:

Obj* pObj = new Obj; 

corresponde a la asignación de memoria nueva llamando operator new con un único parámetro de tipo size_t y el valor de sizeof(Obj), y la construcción de una nueva instancia obj en la posición de memoria devuelto,

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

corresponde a llamar a operator new con tres parámetros, sizeof(Obj) seguido de param1 y param2 y la construcción de la instancia Obj en la memoria apuntada por el valor de retorno de la costumbre operator new.

personalizados operator new s se pueden definir globalmente, o como miembros de clase implícitamente estáticos, en cuyo caso solo se tendrán en cuenta para asignar instancias de clase de ese tipo o tipos derivados.

Hay más cómo y por qué en this FAQ.

+0

Una respuesta impecable: nada se puede agregar o eliminar. – Arafangion

+0

Esta respuesta es oro puro –