基类对象构造完毕之前不可调用成员函数
8.12 ID_illMemberCall
基类对象未构造完毕时调用成员函数会导致标准未定义的行为。
示例:
struct A {
A(int);
};
struct B: A {
B(): A(member()) { // Non-compliant, undefined behavior
}
int member();
};
例中成员函数的返回值作为基类构造函数的参数,而这时基类对象尚未构造,相当于成员函数的调用者没有被初始化,这是一种逻辑错误。
依据
ISO/IEC 14882:2003 12.6.2(8)-undefined
ISO/IEC 14882:2011 12.6.2(13)-undefined