Я только что прочитал в этот ответ, что если у вас есть следующий код
class Base
{
public Base()
{
}
}
class One : Base
{
string test = "text";
}
class Two : Base
{
string test;
public Two()
{
test = "text";
}
}
Для класса One инициализация One.test будет инициализирована до вызова Base::Base. Но Two.test будет инициализирован после вызова Base::Base.
Я предполагаю, что это потому, что в обоих случаях это
- поля ‹- включая One.test
- База::База()
- One::One() или Two::Two() ‹- который инициализирует Two.test
Кажется, я помню, что списки инициализации находятся непосредственно перед конструктором. Итак, порядок инициализации:
- поля
- базовый список инициализаторов
- базовый конструктор
- собственный список инициализаторов
- собственный конструктор
И при чем тут поля Базы? Все ли поля инициализируются первыми при выделении памяти или непосредственно перед списком инициализации текущего базового класса?
И есть ли другие шаги в списке, которые вы можете придумать?
Я был бы признателен, если бы кто-нибудь мог дать хороший обзор.