В чем разница между инициализацией переменной-члена объекта m_A
в классе (class B
) и в списке инициализаторов (class C
)? Является ли один метод более эффективным или предпочтительным по сравнению с другим?
class A
{
public:
A(int num) { m_Int = num; }
private:
int m_Int;
};
class B
{
private:
A m_A{10};
};
class C
{
public:
C(): m_A(10) {};
private:
A m_A;
};
Является ли один метод более эффективным?
Нет, если вы измеряете эффективность в циклах процессора. Можно быть более эффективным в других отношениях, например, быть видимым в файле заголовка, а не скрытым внутри реализации. Тогда эффективность можно было бы измерить по тому, сколько времени понадобится другому программисту, чтобы понять значение по умолчанию.
... или вообще предпочтительнее другого?
Инициализация внутри класса может быть предпочтительнее в ситуациях, когда вы никогда не захотите создавать объект с переменными-членами в неинициализированном состоянии. С другой стороны, если вы не хотите (дорогостоящей) инициализации, которую ваш класс будет выполнять позже, при необходимости, вы должны использовать список инициализаторов в конструкторе(ах), который фактически будет инициализировать переменные-члены. Нет правильного или неправильного.
Является ли один метод более эффективным или предпочтительным по сравнению с другим? Обратите внимание, что ваш код не скомпилировался при использовании компилятора C++98. Посмотрите это