Инициализация объектов, выбранных с новой
Необязательно инициализатор поле доступно в грамматике для создать оператор.Это позволяет новые объекты, которые нужно инициализировать с определяемыми пользователем конструкторами.Дополнительные сведения о том, как выполняется инициализация, см. в разделе Инициализаторы.В следующем примере показано, как использовать выражение инициализации с создать оператор:
// 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 );
// ...
}
В этом примере объект CheckingAcct выбирает использование создать оператор, но никакая инициализации по умолчанию не указаны.Поэтому конструктор по умолчанию для класса, Acct(), вызывает.После этого объект SavingsAcct выберите тот же, за исключением того, что он явно инициализирован до 34,98.Поскольку 34,98 типа Двойное с плавающей запятойвызывается для обработки конструктор, который принимает аргумент типа инициализацию.Наконец, тип nonclass HowMuch инициализирует значение 43,0.
Если объект типа класса, и этот класс содержит конструкторы (как в предыдущем примере), то объект может быть инициализирован создать оператор только в том случае, если одно из этих условий выполняется:
Аргументы, предоставленные в инициализаторе соглашаются с одним из конструктора.
Класс имеет конструктор по умолчанию (конструктор, который может быть вызван без аргументов).
Управление управления доступом и неоднозначности выполняется on operator new и в конструкторах в соответствии с правилами установить в неоднозначность и Инициализация с использованием специальные функции-члены.
Никакой явную инициализацию в-элемента можно сделать с помощью выделения массивы создать оператор; конструктор вызывается только по умолчанию, если он существует.См. по умолчанию аргументы для получения дополнительных сведений.
, Если выделение памяти завершается неудачей (operator new возвращает значение 0)нет инициализация не выполняется.Это защищает от попыток инициализировать данные, которые не существуют.
Как и в случае с вызовами функции, порядок, в котором выражения оцениваются инициализировал не определены.Кроме того, не следует полагаться на этих полностью, прежде чем оцениванными выражениях выделение памяти производится., Если выделение памяти завершается неудачей и создать оператор возвращает нуль, некоторые выражения в инициализаторе полностью не может быть вычислен.