Inicjowanie przydzielone obiekty z nowych
Opcjonalny inicjatora pole znajduje się w gramatyki dla Nowy operatora.Zezwala się na nowe obiekty mają być zainicjowana z konstruktorów zdefiniowane przez użytkownika.Aby uzyskać więcej informacji dotyczących sposobu inicjowania jest wykonywane, zobacz inicjatory.Poniższy przykład ilustruje sposób użycia wyrażenie inicjalizacji z Nowy operatora:
// 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 );
// ...
}
W tym przykładzie obiekt CheckingAcct jest alokowany przy użyciu Nowy operatora, ale nie inicjowania domyślny jest określony.W związku z tym, domyślnego konstruktora dla klasy, Acct(), nosi nazwę.Następnie obiekt SavingsAcct przydzielone taki sam sposób, z wyjątkiem, że go jawnie inicjowana jest 34.98.Ponieważ typ jest 34.98 double, Konstruktor, który przyjmuje argument tego typu nazywa się inicjowanie obsługi.Wreszcie, typ nonclass HowMuch inicjowana jest 43,0.
Jeśli obiekt jest typu klasa i klasy ma konstruktorów (jak w poprzednim przykładzie), obiekt mogą być inicjowane przez Nowy operator tylko wtedy, gdy jeden z tych warunków jest spełniony:
Argumenty podane w inicjatorze zgadzają się z tymi konstruktora.
Klasa ma domyślnego konstruktora (Konstruktor, który można wywołać bez argumentów).
Kontrola dostępu i kontroli niejednoznaczności są wykonywane na operator new i konstruktory zgodnie z zasadami określonymi w niejednoznaczności i Inicjalizacja za pomocą specjalnych funkcji elementów członkowskich.
Inicjowanie nie element jawne może odbywać się podczas przydzielania tablic przy użyciu Nowy operatora; tylko konstruktora domyślnego, jeśli jest obecny, jest nazywany.Zobacz Argumenty domyślne Aby uzyskać więcej informacji.
Jeśli alokacja pamięci nie powiedzie się (operator new zwraca wartość 0), inicjowanie nie jest wykonywane.Chroni to przed próbami zainicjować danych, który nie istnieje.
Podobnie jak w przypadku wywołania funkcji kolejność oceniania zainicjowany wyrażenia nie jest zdefiniowany.Ponadto nie można polegać na tych wyrażeń całkowicie ocenianej przed wykonaniem alokacji pamięci.Jeśli alokacja pamięci nie powiedzie się i Nowy operator zwraca zero, niektóre wyrażenia w inicjatorze może nie być całkowicie ocenione.