[英]C++ wrapper class that is derived from an abstract base class and calls a method in another class that is also derived from the abstract base class
[英]C++ derived class calls method on base class before initialization
这是一个简单的程序,我很确定它有未定义的行为,但我想确定。
struct A {
int x;
A(int y):x(y) {}
int foo() { return x; }
};
struct B : public A {
B():A(foo()) {}
};
我假设这具有未定义的行为,因为对A::foo
的调用发生在构造A
object 之前,它读取了一个未初始化的 class 变量。
但是,如果A::foo
的实现更改为{ return 0; }
{ return 0; }
而不是{ return x; }
,即{ return x; }
不访问 class 成员,它仍然是未定义的行为吗?
进一步的问题 - 如果A::foo
是virtual
的,有什么改变吗?
如class.base.init中所指定,这在两种情况下都是未定义的行为(包括虚拟成员函数):
可以为正在构建的 object 调用成员函数(包括虚拟成员函数,[class.virtual])......但是,如果这些操作在 ctor-initializer 中执行(或在 function 中直接或间接从 ctor-初始化程序)在基类的所有内存初始化程序完成之前,程序具有未定义的行为。
此要点基本上包含您提供的示例代码片段,并明确指出未定义的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.