2011-10-20 56 views
2

我在看一個開源庫VLMC,發現這個單例實現。它的做法是,爲了創建一個單一類庫,庫從一個單例繼承而來。像這樣從單例模板繼承

// SINGLETON_HPP

template <typename T> 
class  Singleton 
{ 
    //regular singleton implementation 
    protected: 
     Singleton(){} 
     virtual ~Singleton(){} 
}; 

template <typename T> 
T* Singleton<T>::m_instance = NULL; 

// LIBRARY_H_

class Library : public Singleton<Library> 
{ 
    //some other stuff 
private: 
    Library(); 
    virtual ~Library(){} 

friend class Singleton<Library>; 
} 

這是一個好的設計?這種設計提供了什麼優勢? 謝謝。

CV

+0

在SO上搜索單身人士,你應該得到很多關於爲什麼和何時不使用單身人士的答案。 – RedX

+0

感謝RedX,我會去搜索它 – blueskin

回答

4

如果您需要在全球一些地方,每個人都看到它的類的一個實例,然後創建一個實例,並把它放在每個人都可以看到它。讓這個類知道它會存在多少個實例並且限制這個類的基本用法是很糟糕的設計。

我不止一次看到,在項目開始時看起來像單身人士的課程在項目結束時幾乎沒有實例。