这段代码定义了一个名为 VirtualKeyboard 的类,该类使用单例模式实现,保证只有一个 VirtualKeyboard 对象实例。

std::unique_ptr<VirtualKeyboard> VirtualKeyboard::instance_ = nullptr;
// 定义静态成员变量 instance_,使用 std::unique_ptr 指向唯一的 VirtualKeyboard 对象,初始值为 nullptr

VirtualKeyboard *VirtualKeyboard::GetInstance()
// 定义静态成员函数 GetInstance(),用于获取 VirtualKeyboard 的唯一实例
{
    if (!instance_) {
        std::string node;
        if (VirtualDevice::FindDeviceNode(VirtualKeyboardBuilder::GetDeviceName(), node)) {
            auto vKeyboard = std::make_unique<VirtualKeyboard>(node);
            // 使用 std::make_unique 创建 VirtualKeyboard 对象
            if (vKeyboard->IsActive()) {
                // 检查 VirtualKeyboard 对象是否已激活
                instance_ = std::move(vKeyboard);
                // 将新创建的 VirtualKeyboard 对象移动到 instance_,保证唯一性
            }
        }
    }
    return instance_.get();
    // 返回 instance_ 指向的 VirtualKeyboard 对象的指针
}

代码解释:

  • std::unique_ptr<VirtualKeyboard> VirtualKeyboard::instance_ = nullptr;
    • 定义了一个静态成员变量 instance_,使用 std::unique_ptr 指向唯一的 VirtualKeyboard 对象。
    • nullptr 表示初始状态下没有创建 VirtualKeyboard 对象。
  • VirtualKeyboard *VirtualKeyboard::GetInstance()
    • 定义了一个静态成员函数 GetInstance(),用于获取 VirtualKeyboard 的唯一实例。
  • if (!instance_)
    • 判断 instance_ 是否为空,如果为空,则表示还没有创建 VirtualKeyboard 对象,需要进行创建。
  • std::string node;
    • 定义一个字符串变量 node,用于存储设备节点信息。
  • if (VirtualDevice::FindDeviceNode(VirtualKeyboardBuilder::GetDeviceName(), node))
    • 调用 VirtualDevice::FindDeviceNode 函数查找 VirtualKeyboard 设备节点,如果找到则将节点信息存储到 node 变量中。
  • auto vKeyboard = std::make_unique<VirtualKeyboard>(node);
    • 使用 std::make_unique 创建一个 VirtualKeyboard 对象,并将设备节点信息 node 传递给构造函数。
  • if (vKeyboard->IsActive())
    • 检查新创建的 VirtualKeyboard 对象是否已激活。
  • instance_ = std::move(vKeyboard);
    • 将新创建的 VirtualKeyboard 对象移动到 instance_,保证 instance_ 一直指向唯一的 VirtualKeyboard 对象。
  • return instance_.get();
    • 返回 instance_ 指向的 VirtualKeyboard 对象的指针。

总结:

这段代码通过 std::unique_ptr 和单例模式实现了 VirtualKeyboard 类的唯一实例管理。通过 GetInstance() 函数,可以获取 VirtualKeyboard 对象的唯一实例,并确保在程序运行期间只有一个 VirtualKeyboard 对象存在。

C++ 代码分析:VirtualKeyboard 类单例模式实现

原文地址: https://www.cveoy.top/t/topic/nPz2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录