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

时间:2016-08-12 20:37:25

标签: c++ qt

查看以下代码:

#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被调用两个对象时,它是被销毁还是会有两个事件循环?

2 个答案:

答案 0 :(得分:6)

这是非法的。您可能正在运行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;

    ....

答案 1 :(得分:0)

不允许这样做。告诉你你的错误并不总是编译器的工作。你错误地假设只是因为某些代码编译,如果代码错误,它会以某种方式编译在编译器上。