不能被繼承的類、不能被拷貝的類、只能定義一個對象的類
不能被繼承的類
將構造函數和析構函數定義為私有的,這樣派生類在構造基類子對象時就不能調用基類私有的構造函數。
class T
{
private:
T() {}
~T() {}
public:
static T* create()
{
return new T();
}
static T* release(T*& p)
{
delete p;
p = 0;
}
};
見構造函數和析構函數聲明為 private ,也限制了本身的對象創建。利用靜態成員函數來創建創建和釋放對象。
這種方式只能在堆上創建對象。
如果還想在棧上創建對象,利用友元機制,聲明友元類,可以調用友元類的 private 構造函數和析構函數,但是友元關系不能被繼承。其中一個友元類 virtual 繼承自含有 private 構造函數和析構函數的被友元類。
不能拷貝的類
拷貝意味著拷貝構造函數和復制運算符,將拷貝構造函數和賦值運算符聲明為 protected 的,并且不需要實現。
class T
{
protected:
T(const T& rhs);
T& operator = (const T& rhs);
};
只能聲明一個對象的類
即是單例模式
將構造函數聲明為 private 以防在棧上隨意定義對象
定義一個 static 的本類型指針,只是指向唯一的一個對象
定義一個 static 成員函數,用于獲得指向唯一的那個對象的指針
class T
{
private:
T() {}
~T() {}
static T* pt;
public:
static T* getInstance()
{
if (pt == 0)
{
pt = new T();
}
return pt;
}
};
T* T::pt = 0;
http://www.shnenglu.com/jake1036/archive/2011/05/21/146870.html
http://blog.csdn.net/xkyx_cn/article/details/2245038
http://www.cublog.cn/u3/112083/showart_2237163.html
http://blog.csdn.net/ericming200409/article/details/5975874
http://blog.csdn.net/wulibin136/article/details/6347215
http://www.shnenglu.com/unixfy/archive/2011/04/29/145340.html
posted on 2011-07-23 21:48
unixfy 閱讀(742)
評論(0) 編輯 收藏 引用