如何用C 寫乙個Singleton 單例模式

2021-07-06 08:00:30 字數 972 閱讀 5554

單例模式是比較常用的設計模式,尤其是在遊戲設計中會經常用到,在面試中也是非常容易被問到和實現。今天我們來看看如何用c++來實現乙個singleton。

單例模式的主要特性是只能例項化乙個物件,在遊戲中我們會有各種資源,我們也會在各個地方需要訪問這些資源,那麼如何得到這些資源呢?我們可以寫乙個資源管理類來獲得各種你想要的資源,問題是在不同的類中如果你想獲取遊戲資源,就要新建乙個資源管理類,這樣其實是對記憶體的浪費。我們其實只需要乙個資源管理類就夠了,那麼這時候就可以使用singleton。

既然只能例項化乙個物件,那麼就不能讓使用者直接用new來例項化物件的,因為這樣使用者將可以例項化很多個物件。我們知道在例項化物件的時候會呼叫建構函式,為了禁止使用者在外部例項化物件,我們可以將建構函式私有化。同樣,我們也不應該允許使用者copy乙個例項,我們可以通過將copy建構函式和賦值函式私有化來禁止copy操作。既然無法在類外例項化物件,使用者要如何獲得乙個物件呢?我們可以提供乙個介面,使用者需要乙個此類物件的時候可以通過這個介面獲得。嗯,乙個簡單的singleton必須包含的內容就這些啦,我們來看看**怎麼實現:

class gamedata

private:

static gamedata* instance;

gamedata();

gamedata(const gamedata& data);

gamedata& operator=(const gamedata& data);

};

在使用的時候我們需要在外部對靜態例項初始化:

gamedata* gamedata::instance = null;

程式結束時刪除此物件:

delete gamedata::getinstance();

乙個基本的singleton大概這樣就可以了,在這裡我沒有考慮執行緒安全,只提供乙個基本寫法。

如何用C 寫乙個類

其實寫乙個類很簡單,但是要寫乙個符合各方面要求的類,卻不是一件容易的事情。下面總結一下需要考慮的一些問題,先把暫時想到的方面記下來,以後想到新的在增加吧。類的生死和初始化 1.copy ctor和copy assignment是不是需要private 單例常用 或者是不是要用private繼承來阻止...

如何用Javascript寫乙個Class?

記得前面某次面試被問到此問題,一直以來因為對js的不重視 一知半解,所以當時就懵了 最近google了下,找到以下幾種寫class的方式 1 js因為不是oo語言,所以沒有class的概念,都是通過prototype的方式實現的。var namedclass class.create getname...

如何用C 寫乙個簡單的Login視窗

最近,看到網上經常會問如何進行視窗跳轉,大多數的問題都是牽扯到login視窗。其實,在visual studio 6以來,比較正確的做法,是判斷login視窗的返回值,然後決定是否開啟主窗體,那麼在c 中也是一樣的。具體做法如下 首先,建立login視窗,然後新增相應的輸入框和按鈕,設定視窗的acc...