2015-11-13 7 views
0

Этот код отлично работает в Windows и Linux, но в Android не вызывает appCfg :: ~ appCfg(). Как изменить код для автоматического уничтожения appCfg (в закрытой программе) на всех платформах?Singleton destroy на разных платформах

.cpp

appCfg * appCfg::p_instance = 0; 
SingletonDestroyer appCfg::destroyer; 

SingletonDestroyer::~SingletonDestroyer() { 
    delete p_instance; 
} 
void SingletonDestroyer::initialize(appCfg* p) { 
    p_instance = p; 
} 

appCfg& appCfg::getInstance() { 
    if(!p_instance)  { 
     p_instance = new appCfg(); 
     destroyer.initialize(p_instance);  
    } 
    return *p_instance; 
} 

appCfg::appCfg() 
{ 
    pSetting = new QSettings(Const::SettingPath()+"/main.cfg",QSettings::IniFormat); 
} 
//called on Windows and Linux platforms, but not on Android  
appCfg::~appCfg() 
{ 
    pSetting->sync(); 
    delete pSetting; 
} 

... 
+0

Почему вы возвращающую ссылку на ** значение * * указателя в методе getInstance? В основном вы не возвращаете ничего, связанное с ** курсором ** p_instance **. – ozgur

+0

@ozur. p_instance, инициализированный при первом вызове getInstance() – Bleach

ответ

-1

Весь код не подходит, поэтому я пишу остальное здесь

.h

class SingletonDestroyer 
{ 
private: 
    appCfg* p_instance; 
public: 
    ~SingletonDestroyer(); 
    void initialize(appCfg* p); 
}; 

class appCfg : public QObject 
{ 
private: 
    static appCfg* p_instance; 
    static SingletonDestroyer destroyer; 

    QSettings * pSetting; 
protected: 
    appCfg(); 
    appCfg(const appCfg&); 
    appCfg& operator=(appCfg&); 
    ~appCfg(); 
    friend class SingletonDestroyer; 
public: 
    static appCfg& getInstance(); 
    ... 
}; 
+2

Это ответ? – Selvin

+0

@ Selvin. Весь код не подходит, поэтому я пишу остальное в ответе – Bleach

Смежные вопросы