C++ 类成员初始化详解

C++ 类成员初始化详解

1. 成员变量的初始化时机

在 C++ 中,类的成员变量可以通过以下方式初始化:

  1. 构造函数初始化列表(推荐方式)
  2. 默认构造
  3. 在声明时初始化

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. 实际发生的过程

  1. 当创建 IsolateManager 对象时:

    IsolateManager manager(platform);  // 创建对象
    
  2. 初始化顺序:

    • 首先,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. 简单类比

想象一下开设一家新公司:

  1. IsolateManager 就像公司本身
  2. isolate_holder_ 就像公司的办公室
  3. 当你注册新公司时(构造 IsolateManager):
    • 自动获得办公室(isolate_holder_ 被构造)
    • 设置经理(platform_
    • 确定营业状态(state_
    • 安排工作人员(thread_

7. 关键点

  • isolate_holder_ 是作为 IsolateManager 的成员变量自动构造的
  • 不需要显式初始化,因为它有默认构造函数
  • 构造顺序是由 C++ 规则决定的:先构造成员变量,再执行构造函数体
posted @ 2025-04-18 15:14  AngDH  阅读(9)  评论(0)    收藏  举报