Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么允许创建多个QCoreApplication对象?_C++_Qt - Fatal编程技术网

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

C++ 为什么允许创建多个QCoreApplication对象?,c++,qt,C++,Qt,查看以下代码: #include <QDebug> #include <QCoreApplication> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); qDebug() << QCoreApplication::instance(); // prints QCoreApplication(0x7ffd39656150) QCoreApplication

查看以下代码:

#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;
}
#包括
#包括
int main(int argc,char*argv[])
{
QCore应用程序应用程序(argc、argv);

qDebug()这是非法的。您可能正在运行Qt的发布版本,并禁用了断言

非常清楚,您不能同时让两个QCoreApplication处于活动状态:

void QCoreApplicationPrivate::init()
{
    Q_Q(QCoreApplication);

    initLocale();

    Q_ASSERT_X(!QCoreApplication::self, "QCoreApplication", "there should be only one application object");
    QCoreApplication::self = q;

    ....

这是不允许的。编译器的工作并不总是告诉你你的错误。你错误地认为,仅仅因为一些代码编译了,如果代码出错,它就在编译器上。

你构造了两次单例。你期望什么?你不应该这样做。单例并不意味着一个类可以充当一只手le到一个底层实例。
Q\u GLOBAL\u STATIC
实现了这一点。再次运行测试。在运行两个qDebug语句之前创建
QCoreApplication
的两个实例,您将看到内存地址是相同的。这意味着单例实例被替换(但未被删除)创建第二个实例时。