Yes, it will be initialized.
The base class has to be fully constructed before the derived class starts to be constructed. So as long as the constructor from A
initialized A::_p
, the derived classes will always* see it fully initialized.
[*] Of course, with enough effort you can always break things; for example: http://coliru.stacked-crooked.com/a/196a5b0217efbbb1
There I used the comma operator to call B::foo()
before anything can be constructed; luckily the compiler detected it as a warning.