1. 程式人生 > >實習學到的一些東西(二)

實習學到的一些東西(二)

最近實習一直在看公司程式碼框架,看到許多用到了單例模式的地方。有些是直接寫一個單例模式實現,有些則是繼承自一個單例模板。 因為繼承自單例模板的實現方式以前沒有接觸過,所以這裡記錄一下。

1、首先宣告一個單例模式模板基類:

template<class T>
class Singleton {
    public:
        static T* get() {
            static T t;
            return &t;
        }
    protected:
        //設為protected是為了以後的派生類繼承它時可以呼叫建構函式
        Singleton
() {} ~Singleton() {} private: //拷貝建構函式和賦值運算都不被允許 Singleton(const Singleton& m); Singleton& operator=(const Singleton& m); };

2、然後令我們想運用單例模式的類繼承自這個類

注意繼承類時模板引數為該類本身,這樣做據說是atl-style程式碼,既可以節省記憶體(因為不需要虛擬函式表),且所有函式的呼叫在編譯時確定,因此它們是可以優化的(參考部落格

class DerivedSingleton : public Singleton<DerivedSingleton>  //模板引數為DerivedSingleton
{
    ...
//該類的其他實現細節 };

然後就實現了單例模式啦~ 這裡好像沒有考慮到執行緒安全問題,需要的話可以看看這篇部落格