Singleton實現的反思

2021-09-30 02:17:23 字數 541 閱讀 7432

singleton可算是最簡單的模式,本文記述小雞射手遇到的問題及反思。

對於singleton,小雞射手想能不能:

1. 將private static成員變數直接宣告為singleton類?

2. 將要呼叫的方法直接宣告為static?

在專案中,採用vc++按方式1實現singleton類,編譯、鏈結一切ok。執行時卻出現了記憶體方面的exception,經除錯發現:static成員變數沒有初始化!原來是在乙個singleton的建構函式中呼叫了另乙個singleton類,而另乙個singleton類還沒有初始化。所以,採用方法1,當多個singleton類之間在建構函式中有互相呼叫的話,可能發生錯誤。

對2也是一樣,如果在乙個singleton的建構函式中呼叫了另乙個singleton的靜態方法,也會由於初始化順序因素導致的問題。另外,方法2還有乙個缺陷就是不能將singleton作為引數傳遞。

結論:- 還是將singleton實現為static singleton類的指標

- 為了避免memory leak,可以增加類似auto_ptr的包裝類。

Singleton的實現方式

於 設計模式之禪 秦小波著 1.餓漢模式 推薦 package com.zby.singleton 餓漢模式,推薦 public class singleton1 public static singleton1 getinstance public static void dosomething ...

Singleton模式的實現

設計乙個類,我們只能生成該類的乙個例項。因為我們只能生成乙個例項,所以我們必須把建構函式設定為私有函式已禁止他人建立例項。可以定義乙個靜態的例項,在需要的時候建立該例項。public sealed class sinleton1 private static singleton1 instance ...

Singleton實現比較

執行下圖中 c 輸出的結果是什麼?並請比較這兩個型別各有什麼特點,有哪些區別。namespace singleton public static void print private static singleton1 instance new singleton1 public static si...