💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ## 概述 1. **线程安全的全局对象创建:** 使用普通的 C++ 静态对象在多线程环境中可能会引发初始化顺序问题和竞争条件。`QGlobalStatic` 提供了一种线程安全的方式来创建全局静态对象,确保它们在第一次访问时进行初始化,并且只会初始化一次。 2. **延迟初始化:** 全局静态对象使用 `QGlobalStatic` 只会在第一次访问时进行初始化。这可以提高程序启动时的性能,因为不需要在程序启动时立即创建所有全局静态对象。 3. **析构顺序保证:** `QGlobalStatic` 还确保全局静态对象的析构顺序正确,这是由于 Qt 的元对象系统和管理机制,它在程序退出时确保对象以正确的顺序销毁。 4. **使用简单:** 使用 `QGlobalStatic` 相对简单,你只需指定对象的类型,然后在需要访问该对象时,使用 `data()` 方法获取对象的指针。 ## 示例 ``` #include <QCoreApplication> #include <QGlobalStatic> #include <QDebug> class MyGlobalObject { public: MyGlobalObject() { qDebug() << "MyGlobalObject constructed"; } ~MyGlobalObject() { qDebug() << "MyGlobalObject destructed"; } void doSomething() { qDebug() << "MyGlobalObject is doing something"; } }; Q_GLOBAL_STATIC(MyGlobalObject, globalObject) int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 访问全局静态对象 globalObject()->doSomething(); return a.exec(); } ```