C++ 类成员初始化详解
C++ 类成员初始化详解
1. 成员变量的初始化时机
在 C++ 中,类的成员变量可以通过以下方式初始化:
- 构造函数初始化列表(推荐方式)
- 默认构造
- 在声明时初始化
2. IsolateManager 的构造过程
// 在头文件中的声明
class IsolateManager {
private:
IsolateHolder isolate_holder_; // 成员变量声明
// ...
};
// 在 .cc 文件中的构造函数
IsolateManager::IsolateManager(v8::Platform* platform)
: platform_(platform), // 初始化 platform_
state_(State::kRun), // 初始化 state_
thread_([this]() { PumpMessages(); }) // 初始化 thread_
{
// isolate_holder_ 会在这里自动默认构造
}
3. 实际发生的过程
-
当创建
IsolateManager
对象时:IsolateManager manager(platform); // 创建对象
-
初始化顺序:
- 首先,
isolate_holder_
会被默认构造 - 然后,其他成员按照初始化列表的顺序初始化
- 最后,执行构造函数体的内容
- 首先,
4. IsolateHolder 的构造
让我们看看 IsolateHolder 是如何被构造的:
5. 完整的初始化流程
// 1. 当创建 IsolateManager 时
IsolateManager manager(platform);
// 2. 内部发生的过程:
// 2.1 IsolateHolder 的构造(自动发生)
IsolateHolder::IsolateHolder() {
// 创建内存分配器
allocator_ = std::make_unique<v8::ArrayBuffer::Allocator>();
// 创建 Isolate
isolate_ = v8::Isolate::New(/*...*/);
}
// 2.2 其他成员的初始化(在构造函数初始化列表中)
platform_ = platform;
state_ = State::kRun;
thread_ = std::thread([this]() { PumpMessages(); });
6. 简单类比
想象一下开设一家新公司:
IsolateManager
就像公司本身isolate_holder_
就像公司的办公室- 当你注册新公司时(构造
IsolateManager
):- 自动获得办公室(
isolate_holder_
被构造) - 设置经理(
platform_
) - 确定营业状态(
state_
) - 安排工作人员(
thread_
)
- 自动获得办公室(
7. 关键点
isolate_holder_
是作为IsolateManager
的成员变量自动构造的- 不需要显式初始化,因为它有默认构造函数
- 构造顺序是由 C++ 规则决定的:先构造成员变量,再执行构造函数体