静态对象永远不会被正确地销毁
static object gets never destroyed properly
我有一个像这样实现的Singleton类:
class QueueManager : public QObject
{
Q_OBJECT
public:
static QueueManager *instance() {
static QueueManager ins;
return &ins;
}
private:
QueueManager(QObject *parent = 0);
~QueueManager() {
system("touch ./shared/documents/exec.txt");
}
};
我意识到~QueueManager()
从来没有被调用过(exec.txt没有被创建)。但是,正如本线程中所指出的,C++标准规定应该在最后调用析构函数。为什么在我的情况下不叫它?
我使用的是黑莓10,使用的是qcc编译器。
它可能会受到程序终止方式的影响。
例如,调用abort()
将在不离开当前块的情况下终止程序,因此不会破坏静态对象。根据系统的不同,程序因信号而终止可能导致静态不被破坏。
对于这些问题,显而易见的解决方案是只通过返回main()和从main()返回来退出程序。
编译器和标准库需要一定数量的记账,以确保静态信息被销毁。一些旧的编译器并没有做得特别好,尽管现代编译器不太可能做到这一点。在C++11之前,在多线程代码中没有与静态结构的构建/破坏相关的要求(因为标准中有一个基本假设,即没有多线程)。
这不是真正的解决方案,但对于我的问题来说,这是一个足够的解决方法。我已经将我的处置代码放在连接到aboutToQuit()
的插槽中——构造函数中的以下行:
connect(QCoreApplication::instance(), SIGNAL(aboutToQuit()), this, SLOT(onDestroy()));
相关文章:
- 如何取消对nullptr的屏蔽,返回正确的对象
- 如何正确地将分支添加到已存在的树中
- 如何正确地将带有指针的数组传递给函数
- 如何正确地推回然后遍历堆中对象的向量?
- 我是否不正确地集中了这些字符数组?
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 我怎样才能通过友谊正确地履行我的职能?
- C++:如何正确地将 deque::front() 返回的变量从函数中传递出去?
- 如何将一个字节数组正确地恢复为C 中的对象
- 如何正确地将规则 5(或零?)应用于包含带有字符串的自定义对象向量的类
- 如何正确地使一个对象拥有另一个多态对象
- 静态对象永远不会被正确地销毁
- 如何正确地将对象添加到向量,而无需两次调用析构函数
- 如何在矢量中高效、正确地插入对象
- C++正确地使用std::set和对象
- 如何正确地创建一个单例对象并在C++中使用它
- 正确地为其他对象创建共享指针
- 在c++中似乎不能正确地向数组中添加对象
- 确保c++对象被正确地解分配
- 如何正确地push_back对象