2014-01-28 3 views
5

У меня есть два класса А и В, и в классе AI есть член типа B:Правильно ли этот конструктор?

class B { 
    public: 
     B(); //default constructor 
}; 

class A { 
    public: 
     A(); //constructor 
     B b; 
}; 

Это определение конструктора Класс A по:

A::A() : b() 
{} 

Здесь я попытался инициализировать b, используя список инициализации. Мой вопрос в том, является ли этот способ инициализировать b правильно, или я просто создаю еще один временный объект с именем b внутри конструктора A, который не имеет ничего общего с A::b?

+0

Правильно? Да. Необходимо? № – crush

ответ

9

Это правильно. Однако, поскольку b имеет тип класса, конструктор по умолчанию будет вызываться автоматически, если b не указан в списке инициализации A::A, поэтому вам не нужно упоминать его вообще.

4

Этот метод инициализирует поле b конструктором B::B(). Он не создает временную локальную.

Обратите внимание, что в этом конкретном случае это также не нужно. Конструктор по умолчанию, созданный для A, сделает это сам по себе. Нет ничего плохого в том, чтобы быть явным здесь, это просто не нужно

+0

, если конструктор A не является значением по умолчанию, то будет ли необходимость в вызове 'b()' внутри списка инициализации этого конструктора? – Chin

+0

@Chin no, он все равно будет вызываться – JaredPar

+0

@Chin: Язык C++ гарантирует, что для членов класса вызывается один конструктор, если он имеет конструктор по умолчанию. (Типы без конструктора по умолчанию все еще _initialized_, но потенциально не к полезным значениям. 'Int',' int [3] 'и' std :: array 'являются примерами) –

Смежные вопросы