我用初始化程序列表遇到以下几个问题,我从来没有能够很好地解释它。任何人都可以解释为什么完全以下失败(我没有编译器捕捉错别字,所以大家多多包涵):在构造函数初始化程序中使用成员的成员函数
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(){}'? – 2010-05-04 20:32:55
这个编译和运行使用GCC 3.4.3在Cygwin中没有错误。你使用什么编译器? – andand 2010-05-04 20:45:27