static變數從某種意義上說就是乙個單件,也就是只有乙個物件將被建立。它的分建立時機是:當它作為乙個類成員變數時,只有當類被建立或說是被分配記憶體空間時才會建立;如果它是乙個函式(包括類的成員函式),裡時,只是當成員函式第一次被使用時才會被建立。
首先,我們提供乙個檔案的單件,為我們在使用檔案輸入輸出時提供方便:
//:logfile.h
#ifndef logfile_h
#define logfile_h
#include
std::ofstream& ologfile();
std::ifstream& ilogfile();
#endif
// logfile_h ///:~
//:logfile.cpp
#include "logfile.h"
std::ofstream& ologfile()
std::ifstream& ilogfile()
///:~
此時olog和ilog物件將在ologfile()和ilogfile()被呼叫時建立,所以如果建立以下函式:
//:uselog1.h
#ifndef uselog1_h
#define uselog1_h
void f();
#endif
// uselog1_h ///:~
此時ologfile()被使用:
//:uselog1.cpp
#include "uselog1.h"
#include "logfile.h"
void f()
///:~
同時建立另外乙個函式:
//: c10:uselog2.cpp
// logfile uselog1
#include "uselog1.h"
#include "logfile.h"
using
namespace std;
void g()
int main()
///:~
olog將在f()在main中使用時被建立。
在此我們可以將logfile.h和logfile.cpp儲存起來供以後使用,而不必每次重複的去寫輸入輸出檔案了。
這是《thinking in c++》中提供的乙個單件設計模式,他使用的是引用:
//:singletonpattern.cpp
#include
using
namespace std;
class singleton
~singleton(){}
void
operator=(singleton&);
singleton(
const singleton&);
public:
static singleton& instance()
int getvalue()
void setvalue(
int x)
};int main()
///:~
這裡我們注意到在singleton中建構函式,析構函式,賦值函式,拷貝函式都被私有化,而且賦值函式及自初始化往復運動數沒有提供實現,這就杜絕了通過其它途徑建立乙個物件,只有在靜態成員函式instance()被呼叫時才會唯一的建立乙個靜態物件。
設計模式 單件模式
1 1 singleton.h ifndef singleton h define singleton h include using namespace std class singleton 構構函式,防止拷貝構造另乙個例項,作為protected singleton 析構函式,作為protec...
設計模式 單件模式
2015年1月29日16 02 59 單件模式是用來保證共有資源唯一性的設計模式,舉個例子吧,假如我們是藝人,我們在同乙個經紀人的協助下開展工作,我們可以委託這個經紀人做一些事情,但是我們不能委託經紀人在幫你做報表的同時幫我訂外賣。用程式猿的語言來表達就是,我們可能在多處地方持有對同一資源的引用。由...
設計模式 單件模式
保持單一物件有時非常必要,尤其是資源類,比如視窗資源,登錄檔等等,所謂的單件模式的定義是 確保乙個類只有乙個例項,並提供乙個全域性的訪問點。其類圖雖說比較簡單,但單例模式還是有很多陷阱的。首先,給出單例模式的經典的懶漢式寫法 懶漢式 需要例項物件時才建立,延遲建立 class single pubi...