Я только что прочитал в this answer, что если у вас есть следующий кодКаков порядок инициализации в классе?
class Base
{
public Base()
{
}
}
class One : Base
{
string test = "text";
}
class Two : Base
{
string test;
public Two()
{
test = "text";
}
}
Для класса одним из initializaton One.test будет initalized до того Base :: Base называется. Но Two.test будет инициализирован после вызова Base :: Base.
Я предполагаю, что это потому, что в обоих случаях
- поля < - это включает в себя One.test
- Base :: Base()
- Один :: Один (или) Два :: Two() < - который инициализирует Two.test
Я думаю, что я помню, что списки инициализации находятся непосредственно перед конструктором. Так порядок инициализации затем:
- поля
- базовый список инициализатор
- базовый конструктор
- собственный список инициализатор
- собственный конструктор
И где же поля базы заходи? Все ли поля инициализируются первым, когда выделена память или непосредственно перед списком инициализации текущего базового класса?
И есть ли другие шаги в списке, о которых вы можете думать?
Буду признателен, если кто-то может дать хороший обзор.
Итак, как вы подключения C# ответ с C++? – 0x499602D2
Полностью пропустил это. Ну, мне все равно хотелось бы знать, как это работает, как на C++. – Sarien
Написанный код недействителен в C++. – deepmax