Инициализация. В чем Profit?
{
CSomeClass();
private:
bool isState1, isState2;
};
Инициализация членов:
CSomeClass::CSomeClass()
: isState1(true), isState2(false)
{
}
CSomeClass::CSomeClass()
{
isState1 = true;
isState2 = false;
}
Какой способ предпочтительней? Какие подводные камни могут где встетится? На мой взгляд монопенисуально. А что скажут профи?
Где об этом есть почитать?
Здесь просто класс... ничего более
То бишь не через список инициализации а в конструкторе по 2-му варианту?
В твоём случае, isState1 и isState2 - встроенного типа, поэтому - как хошь. Если бы было class isState1 и class isState2 - тогда списком.
Не самый, потому что пропёрся и лишнего вписал: в первом случае будет вызван конструктор либо конструктор копирования, во втором - только опрератор присваивания, со всеми вытекающими. Например, если потребуется инициализировать переменную перегруженным конструктором, то в результате присваивания произойдёт создание анонимного объекта и копирование его с помощью оператора присваивания, в то время как инициализатор вызовет конструктор переменной напрямую. Некоторые переменным-членам вообще нельзя присваивать значения, их можно только инициализировать - ссылки и константы яркий тому пример. Если тип переменной не имеет конструктора по умолчанию (без параметров), то без инициализатора программа так же не скомпилируется. И даже в случае простого копирования параметра в переменную-член, реализация конструктора копирования и оператора присваивания могут не совпадать (это, в частности, может быть актуально для каких-нибудь умных указателей).
Ну и напомню, на всякий: инициализация происходит не в порядке написания инициализаторов, а в порядке объявления переменных-членов.
А вот где почитать помимо стандарта - не знаю. Да и в стандарте, если честно, пока не смотрел :)
{
CSomeClass();
private:
bool isState1, isState2;
};
Инициализация членов:
CSomeClass::CSomeClass()
: isState1(true), isState2(false)
{
}
CSomeClass::CSomeClass()
{
isState1 = true;
isState2 = false;
}
Какой способ предпочтительней? Какие подводные камни могут где встетится? На мой взгляд монопенисуально. А что скажут профи?
Предпочтительнее №1 ибо используя C++ используйте C++, не забывая в более сложных случаях и об исключениях.