为什么允许创建多个QCoreApplication对象?

Why is it allowed to create more than one QCoreApplication objects?

本文关键字:QCoreApplication 对象 创建 许创建 为什么      更新时间:2023-10-16

看下面的代码:

#include <QDebug>
#include <QCoreApplication>
int main(int argc, char *argv[])
{
  QCoreApplication app(argc, argv);
  qDebug() << QCoreApplication::instance(); // prints QCoreApplication(0x7ffd39656150)
  QCoreApplication app2(argc, argv);
  qDebug() << QCoreApplication::instance(); // prints QCoreApplication(0x7ffd39656160)
  return 0;
}

看起来可以创建多个QCoreApplication对象,但那应该是单例的。第一个创建的QCoreApplication对象发生了什么?当exec被调用两个对象时,它是被销毁还是会有两个事件循环?

这是违法的。您可能正在运行Qt的发布版本,其中禁用了断言。

https://code.woboq.org/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp.html#742非常清楚地表明,您不能同时有两个QCoreApplication活动:

void QCoreApplicationPrivate::init()
{
    Q_Q(QCoreApplication);
    initLocale();
    Q_ASSERT_X(!QCoreApplication::self, "QCoreApplication", "there should be only one application object");
    QCoreApplication::self = q;
    ....

不允许。告诉您错误并不总是编译器的工作。您错误地认为,仅仅因为某些代码可以编译,如果代码是错误的,那么它在某种程度上取决于编译器。

相关文章:
  • 没有找到相关文章