Несколько раз я сталкивался с перечисленным ниже списками инициализаторов и никогда не мог объяснить это хорошо. Может кто-нибудь объяснить, почему именно следующее терпит неудачу (у меня нет компилятора, чтобы ловить опечатки, так что терпите меня):
class Foo
{
public:
Foo( int i ) : m_i( i ) {} //works with no problem
int getInt() {return m_i;}
~Foo() {}
private:
int m_i;
};
class Bar
{
public:
Bar() :
m_foo( 5 ), //this is ok
m_myInt( m_foo.getInt() ) //runtime error, seg 11
{}
~Bar() {}
private:
Foo m_foo;
int m_myInt;
};
При попытке вызвать функции-члены членов, инициализированных выше по списку инициализаторов, я получаю ошибки seg. Кажется, я помню, что это известная проблема (или, возможно, как-то по замыслу), но я никогда не видел ее хорошо описанной. Прикрепленный пример разработан с простыми старыми типами данных, но замените Bar::m_myInt
другим объектом, в котором отсутствует конструктор по умолчанию (пустой), и проблема более реальна. Кто-нибудь может просветить меня?