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
的两个实例,您将看到内存地址是相同的。这意味着单例实例被替换(但未被删除)创建第二个实例时。