[英]C++ how to delete Singleton object's used in many classes
假設我有3個班級(A,B和C)。 每個類都有一個Singleton類的實例變量,並在該類的某些函數中使用此實例變量。
該類可能如下所示:
SingletonClass* mSingletonClass; // declared in header file
mSingletonClass = SingletonClass::getInstance(); // called in constructor
mSingletonClass->doSomething(); // called in function doSomething()
mSingletonClass->doSomething1(); // called in function doSomething1()
單例類
class SingletonClass : public QObject {
Q_OBJECT
public:
static SingletonClass* getInstance();
// some functions
private:
SingletonClass();
SingletonClass(SingletonClass const&);
SingletonClass& operator=(SingletonClass const&);
static SingletonClass* mInstance;
};
單例類
SingletonClass* SingletonClass::mInstance = 0;
SingletonClass* SingletonClass::getInstance() {
if (!mInstance) {
mInstance = new SingletonClass();
}
return mInstance;
}
SingletonClass::SingletonClass() : QObject() {
}
我應該如何delete
實例變量?
如果我打電話delete mSingletonClass;
在每個解構函數(A,B和C)上,應用程序崩潰。
如果我只叫delete mSingletonClass;
是否足夠delete mSingletonClass;
一次,例如在A類中?
您絕不會在使用單例對象的任何類中銷毀它。 單例是單例的根本原因是在系統中只有一個實例,它創建一次並永久保存,直到程序即將退出。
John Vlissides在他的C ++ Report文章“ 殺死單身人士”中討論了一種破壞單身人士的方法。 他建議使用特殊的“防護”對象,該對象在破壞時會刪除指向單例的指針。 在現代C ++中,您可以通過將unique_ptr<T>
指向單例實例來實現相同的效果(可以將其用於mInstance
變量)。
您可以在SingletonClass內放置一個靜態成員變量(例如SingletonClassDestroyer)以幫助銷毀它,因為當程序終止時,靜態成員變量的生命周期就會結束。 SingletonClassDestroyer應該采用SingletonClass實例,並在其自己的析構函數〜SingletonClassDestroyer()中銷毀它。 因此,SingletonClassDestroyer將幫助您最終自動銷毀SingletonClass實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.