2010-10-11 12 views
11

¿Puedo llamar a la ubicación C++ como nueva en constructores con parámetros? Estoy implementando un asignador personalizado y quiero evitar tener que mover la funcionalidad de los constructores no predeterminados a una función init.Construcción de constructores nuevos y no predeterminados

class CFoo 
{ 
public: 
    int foo; 
    CFoo() 
    { 
     foo = 0; 
    } 

    CFoo(int myFoo) 
    { 
     foo = myFoo; 
    } 
}; 

CFoo* foo = new (pChunkOfMemory) CFoo(42); 

yo esperaría un objeto de tipo CFOO a ser construido en pChunkOfMemory usando el segundo constructor. Al usar el operador new am, ¿solo me quedo con los constructores predeterminados?

¡Solucionado! No lo hice #include <new>. Después de esto, llamar a placement :: new funcionó bien con los constructores no predeterminados.

+2

¿Lo has probado? –

+0

Sí - error C2660: 'operador nuevo': la función no toma 2 argumentos. ¿Tienes una respuesta a la pregunta? –

+4

¿La colocación nueva sin argumentos de constructor funciona en el mismo contexto? ¿Recordó '#include '? – aschepler

Respuesta

16

Para utilizar la colocación de nuevo, es necesario incluir la cabecera <new>:

#include <new> 

De lo contrario las formas de colocación de operator new no están definidos.

+0

¡Éxito! No puedo creer que he estado luchando con esto todo el día y que era un archivo de inclusión que faltaba. D'oh! Gracias GMan y aschelper. –

+0

@Chris: Sí. Es fácil olvidarse de estos pequeños encabezados porque a menudo están incluidos por otros que casi siempre están incluidos. – GManNickG

+4

Incluir '' es la respuesta práctica a la pregunta del OP, pero la información dada en la primera línea anterior es incorrecta. No es necesario incluir 'new', pero debe definirse la función de asignación' operator new' relevante (como miembro o en el espacio de nombres global). Para el OP: para asegurarse de usar la función de asignación global, generalmente debe escribir ':: new', no solo' new', al usar la colocación "construir en el lugar" nueva; de lo contrario, puede elegir una función de asignación de miembros. –

Cuestiones relacionadas