Я несколько раз сталкивался с списками инициализаторов, и я никогда не мог это объяснить. Может кто-нибудь объяснить, почему именно следующее выходит из строя (я не компилятор, чтобы поймать опечаток, так что медведь со мной):Использование функций-членов элементов в инициализаторе конструктора
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
на другой объект, в котором отсутствует конструктор по умолчанию (пустой), и проблема более реальна. Может ли кто-нибудь просветить меня?
Typo: '~ Foo {}' for '~ Foo() {}'? –
Это компилируется и запускается с использованием GCC 3.4.3 без ошибок в Cygwin. Какой компилятор вы используете? – andand