基类在被访问时初始化
Base class is unitialized while being accessed
以下代码:
#include <iostream>
struct A {
int a;
virtual int foo(){ std::cout << "foo()" << std::endl; return 5; }
A(int a) : a(a){ }
};
struct B : A{
B() : A(foo()){ }
};
int main()
{
B b;
}
现场演示
产生关于
的警告warning: base class 'A' is uninitialized when used here to access 'A::foo'
这是否意味着访问未初始化的基类会产生Undefined Behavior
?
在我的例子中,A::a
得到了5
的值,这是ok的
是的,这是未定义行为(IIRC),因为foo
是一个虚方法。
如果foo
不是虚的,行为将被定义,但在对象初始化之前调用该方法仍然是一个有问题的想法。
相关文章:
- 在 C++ 中访问 lambda 捕获初始化变量
- 初始化指向类实例的智能指针并访问其方法
- 使用值初始化访问构造函数?
- Windows C++静态库在初始化期间无法访问外部方法
- 在派生类的构造函数初始化中无法访问受保护的函数
- 有没有办法使用初始化到第一行的指针访问 2d 数组的第二行?
- 初始化指针时出现写入访问冲突
- 如何在 getter 的父类中初始化变量的情况下访问子类中的变量
- C++嵌套结构初始化和访问成员
- 访问未初始化的值,很可能在向量中
- 视觉C++ Int 似乎没有初始化并引发异常:读取访问冲突
- C 如何避免访问尚未初始化的对象的成员
- C - 空数对象的初始化发送不良访问错误
- 使用GLGENBUFFERS()访问违规,并以正确的顺序进行GLEW初始化
- 为什么未初始化的指针会导致接近 0 的 mem 访问冲突
- 如何正确创建、初始化和访问类的静态成员
- 聚合初始化不支持构造函数访问
- 使初始化变量可供多个属性初始化方法访问
- 使用memset初始化后,访问违反写作错误写入2D数组
- 访问和打印用 new 初始化的矢量的矢量