【发布时间】:2017-07-29 20:26:43
【问题描述】:
这个简单的代码在程序结束时崩溃(Qt 5.9.1,gcc 5.4.1):
#include <QCoreApplication>
#include <memory>
std::shared_ptr<QCoreApplication> manager;
int main(int argc, char *argv[])
{
manager = std::make_shared<QCoreApplication>(argc, argv);
}
我知道通常的方法是在堆栈上声明一个QCoreApplication 实例,并在main() 的末尾将其销毁,但我的用例如下:我正在包装一个使用的库Qt 与 Boost.Python,当 python 模块被加载时,我像上面一样初始化 Qt。但是,我无法销毁QCoreApplication,除非我强制用户调用一些finalize() 方法。
当时的想法是在库(python 模块)被卸载时将其销毁,但这似乎不起作用。以上是预期的,如果是,为什么? “破坏顺序问题”是我的第一个猜测,但在这种情况下,这是否应该被视为一个错误?
【问题讨论】:
-
应用程序对象是一个全局变量/单例(您可以使用
qApp或QCoreApplication::instance()获取它)并且初始化可能会做很多事情,我不确定您是否真的卸载它。最好从 Python 创建应用实例,然后直接使用它。