C++中的继承构造函数安全性



我有这个层次结构:

struct Params { int k = 17; };
struct A
{
    A(Params& par): _p(par)
    { }
    Params& _p;
};
struct B: public A
{
    using A::A;
    int c{this->_p.k};
};
int main()
{
    Params p;
    B b(p);
    return 0;
}

我可以放心,在B::c声明中调用A::_p之前,将始终对其进行初始化吗?

谢谢!

是的,它将被初始化。

开始构造派生类之前,必须完全构造基类。因此,只要A初始化的构造函数A::_p,派生类将始终*看到它完全初始化。

[*] 当然,只要付出足够的努力,你总是可以打破东西;例如:http://coliru.stacked-crooked.com/a/196a5b0217efbbb1在那里,我使用逗号运算符在构造任何内容之前调用B::foo();幸运的是,编译器将其检测为警告。

最新更新