我刚刚读到这个答案,如果你有以下代码
class Base
{
public Base()
{
}
}
class One : Base
{
string test = "text";
}
class Two : Base
{
string test;
public Two()
{
test = "text";
}
}
对于第一类,初始化 One.test 将在调用 Base::Base 之前初始化。但是 Two.test 将在 Base::Base 被调用后被初始化。
我认为这是因为在这两种情况下
- 字段 <- 这包括 One.test
- 基数::基数()
- One::One() 或 Two::Two() <- 初始化 Two.test
我想我记得初始化列表就在构造函数之前。那么初始化顺序也是:
- 字段
- 基本初始化列表
- 基础构造函数
- 自己的初始化列表
- 自己的构造函数
而Base的领域又是从哪里来的呢?是在分配内存时首先初始化所有字段还是在当前基类的初始化列表之前初始化所有字段?
您还能想到列表中的其他步骤吗?
如果有人能给出一个很好的概述,我将不胜感激。