我有兩個單身,第一個的頭看起來像這樣(我省略了不相關的Singleton模式的所有內容):這個單身模式爲什麼不起作用?
#ifndef TEXTUREMANAGER_DEFINED_H
#define TEXTUREMANAGER_DEFINED_H
class FontManager;
class TextureManager
{
private:
static TextureManager *instance;
TextureManager();
public:
FontManager *fontManager;
static TextureManager* Instance();
};
#endif
並在實施,這是Instance()方法(和實例靜態成員的初始化):
#include "FontManager.h"
TextureManager * TextureManager::instance = 0;
TextureManager* TextureManager::Instance()
{
if (instance==0)
instance=new TextureManager;
return instance;
}
這是構造函數:
TextureManager::TextureManager()
{
fontManager=FontManager::Instance();
}
第二單的(FontM anager)的設計完全一樣,但是不是FontManager指針具有TextureManager指針,而是在其構造函數中使用TextureManager :: Instance()初始化該指針。 這應該像這樣工作:TextureManager首先實例化(當程序啓動時),並且在它的構造函數實例中第一次調用FontManager單例調用FontManager :: Instance()。在它的構造函數中,FontManager使用TextureManager :: Instance()將其指針指定給TextureManager,並且此方法返回已存在的TextureManager實例。對?
但是,而不是程序進入無限循環,因爲(我不知道爲什麼)Instance()方法總是創建一個新的實例。我喜歡if (instance==0)
總是評估爲真。
你爲什麼需要這個fontManager?它也是單例...所以你可以稍後使用它...不在紋理管理器的構造函數中 – fen 2012-04-05 09:15:22