#include Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin); Q_IMPORT_PLUGIN(QWindowsVistaStylePlugin); class Instance { private: Instance(); public: ~Instance(); public: static Instance* Init() { //!! notice the static keyword !! static class Instance instance; return &instance; // return new class Instance(); } private: class RuntimeHost { public: RuntimeHost(); ~RuntimeHost(); private: int qt_app_argc_ = 1; char* qt_app_argv_[2] = {nullptr, nullptr}; private: char* qt_app_argv_0_ = nullptr; class QCoreApplication* qt_app_ = nullptr; private: class QLabel* qt_widget_ = nullptr; public: auto Execute() const { qt_widget_->show(); return qt_app_->exec(); } }; private: class RuntimeHost* runtime_host_ = nullptr; public: int Run() { return runtime_host_->Execute(); } }; Instance::Instance() { printf("%s\n", __FUNCTION__); runtime_host_ = new class RuntimeHost(); } Instance::~Instance() { delete runtime_host_; printf("%s\n", __FUNCTION__); } Instance::RuntimeHost::RuntimeHost() { printf("%s\n", __FUNCTION__); qt_app_argv_0_ = new char[10](); //"Test.exe"; qt_app_argv_0_[0] = 'T'; qt_app_argv_0_[1] = 'e'; qt_app_argv_0_[2] = 's'; qt_app_argv_0_[3] = 't'; qt_app_argv_0_[4] = '.'; qt_app_argv_0_[5] = 'e'; qt_app_argv_0_[6] = 'x'; qt_app_argv_0_[7] = 'e'; qt_app_argv_0_[8] = 0; qt_app_argv_[0] = qt_app_argv_0_; printf("%s\n", "new QApplication"); qt_app_ = new QApplication(qt_app_argc_, qt_app_argv_); printf("%s\n", "new QLabel"); qt_widget_ = new QLabel("Hello World"); qt_widget_->setAlignment(Qt::AlignCenter); qt_widget_->setMinimumSize(QSize(646, 482)); } Instance::RuntimeHost::~RuntimeHost() { printf("%s\n", "delete QLabel"); delete qt_widget_; printf("%s\n", "delete QApplication"); delete qt_app_; delete[] qt_app_argv_0_; printf("%s\n", __FUNCTION__); } int main(int /*argc*/, char* /*argv*/[]) { // crash for `static class Instance instance` return Instance::Init()->Run(); /* // ok for `return new class Instance()` auto instance = Instance::Init(); auto res = instance->Run(); delete instance; return res; */ }