Objetos que se inicializan Allocated con nuevo

Un campo opcional de inicializadores se incluye en la gramática del operador de nuevo .Esto permite que los nuevos objetos se inicializan con constructores definidos por el usuario.Para obtener más información sobre cómo la inicialización terminado, vea inicializadores.El ejemplo siguiente muestra cómo utilizar una expresión de inicialización con el operador de nuevo :

// expre_Initializing_Objects_Allocated_with_new.cpp
class Acct
{
public:
    // Define default constructor and a constructor that accepts
    //  an initial balance.
    Acct() { balance = 0.0; }
    Acct( double init_balance ) { balance = init_balance; }
private:
    double balance;
};

int main()
{
    Acct *CheckingAcct = new Acct;
    Acct *SavingsAcct = new Acct ( 34.98 );
    double *HowMuch = new double ( 43.0 );
    // ...
}

En este ejemplo, el objeto CheckingAcct se asigna mediante el operador de nuevo , pero no se especifica ninguna inicialización predeterminada.Por consiguiente, se llama al constructor predeterminado para la clase, Acct().El objeto SavingsAcct se asigna la misma manera, salvo que explícitamente se inicializa en 34,98.Porque 34,98 es de Doblecon tipo, se llama al constructor que toma un argumento de ese tipo para controlar la inicialización.Finalmente, el tipo HowMuch de los nonclass se inicializa en 43,0.

Si un objeto es de un tipo de clase y esa clase tiene constructores (como en el ejemplo anterior), el objeto se puede inicializar por el operador de nuevo sólo si una de estas condiciones se cumple:

  • Los argumentos proporcionados en el inicializador coinciden con los de un constructor.

  • La clase tiene un constructor predeterminado (un constructor que puede llamar sin argumentos).

El control de acceso y de ambigüedad se realiza en operator new y en los constructores según las reglas disponga en ambigüedad y Inicialización mediante funciones miembro especiales.

Ninguna inicialización explícita de reemplazan puede hacer sin asignar matrices con el operador de nuevo ; solo se llama al constructor predeterminado, si existe.Vea argumentos predeterminados para obtener más información.

Si se produce un error en la asignación de memoria (operator new devuelve un valor de 0), no se realiza ninguna inicialización.Esto impide intentos de inicializar los datos que no existe.

Como con llamadas a funciones, inicializado el orden en que se evalúan las expresiones no son definidas.Además, no debe confiar en estas expresiones que son evaluadas completamente antes de realizar la asignación de memoria.Si se produce un error en la asignación de memoria y de nuevo devuelve cero, algunas expresiones en el inicializador no pueden evaluar completamente.

Vea también

Referencia

operador new (C++)