C 單例不可繼承

2021-08-30 21:16:15 字數 805 閱讀 6136

c++語言和單例的特性決定了單例不可繼承。

單例有如下幾項要求:

1. 建構函式為私有,或者至少不可以被此類的繼承體系以外的類訪問當,即要麼是private,最壞也是protected

2. 建構函式只被呼叫一次,以初始化static物件。

所以如果b1,b2,繼承至單例a,則不可以實現在程式執行的整個過程中既有乙個b1單例又有乙個b2單例,而且兩個單例不存在依賴關係,原因是b1、b2共享乙個a基類,而b1和b2的靜態物件宣告在a中,即兩者共享乙個base靜態物件,因此對b1和b2兩次呼叫初始化函式(getinstance)時候,實際上基類a的靜態物件會有兩次初始化的動作(getinstance),當然,基類的靜態物件只會例項化一次,具體例項化位子類的b1還是b2型別,要看兩個子類例項化呼叫的先後次序。

所以即使兩個例項化都第一次呼叫getinstance,也只例項化了乙份靜態物件,並且被兩個類共享。這樣的單例沒有意義。

#include using namespace std;

class csingleton

static void release() //必須,否則會導致記憶體洩露

}virtual void printfname()

protected:

csingleton()

{ cout<<"csingleton"s1->printfname();

s2->printfname();

s1->release();

system("pause");

return 0;

css中可繼承與不可繼承

不可繼承的 display margin border padding background height min height max height width min width max width overflow position left right top bottom z index ...

css可繼承屬性和不可繼承屬性

不可繼承的 display margin border padding background height min height max height width min width max width overflow position left right top bottom z index ...

css 可繼承和不可繼承的屬性

一 有繼承性的屬性 1 字型系列屬性 font 組合字型 font family 規定元素的字型系列 font weight 設定字型的粗細 font size 設定字型的尺寸 font size繼承的是計算後的實際值 font style 定義字型的風格 font variant 設定小型大寫字母...