mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-05 00:21:29 +00:00
8577b00cb7
We have a prevailing problem with global QObjects defined as static global variables. These get destructed after main() exits, which means that the QApplication object does not exist anymore. This more often than not leads to crashes. In a quick search I didn't find a mechanism to register objects for deletion with QApplication. Therefore, let's do our own list of global objects that get destructed before destroying the QApplication. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
21 lines
528 B
C++
21 lines
528 B
C++
// SPDX-License-Identifier: GPL-2.0
|
|
#include "globals.h"
|
|
|
|
#include <vector>
|
|
|
|
static std::vector<GlobalObjectBase *> global_objects;
|
|
|
|
void register_global_internal(GlobalObjectBase *o)
|
|
{
|
|
global_objects.push_back(o);
|
|
}
|
|
|
|
void free_globals()
|
|
{
|
|
// We free the objects by hand, so that we can free them in reverse
|
|
// order of creation. AFAIK, order-of-destruction is implementantion-defined
|
|
// for std::vector<>.
|
|
for (auto it = global_objects.rbegin(); it != global_objects.rend(); ++it)
|
|
delete *it;
|
|
global_objects.clear();
|
|
}
|