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?
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?
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.
Una respuesta impecable: nada se puede agregar o eliminar. – Arafangion
Esta respuesta es oro puro –
¿Estás seguro de que has escrito correctamente? No parece haber una variable para aceptar el resultado de nuevo. –
Creo que se suponía que era "Thing * pThing = new (getHeap(), getConstraint()) Thing (initval());". Es de # 14 en C++ gotchas – CTT
Gracias, CTT. Ahora tiene sentido. –