由於最近經常用到鎖的操作,所以打算寫一篇文章記錄下相關的操作和感想。以下就用臨界區(window平台)舉例子。 假如有個setval函式,該函式需要用到加鎖和解鎖,該函式有多個出口,第1版本的setval**如下:
假如寫**的時候不小心少寫了解鎖的**,對後面的影響是很大的。是否有好的辦法既減少編寫**錯誤,同時不必要每個函式出口點都新增解鎖**呢?想到當物件生命期結束時會自動呼叫其析構函式,如果把解鎖放在析構函式是否可行?考慮到有不同的鎖,於是寫了乙個抽象鎖類,乙個具體鎖類和乙個呼叫類,具體**如下:int setval(int ival)
else if( 2 == ival)
else
return 0;
}
//抽象類
class clockobject
~clockobject(){}
virtual void lock() = 0;
virtual void unlock() = 0 ;
};//具體鎖,使用臨界區舉例
class cmycriticalsection : public clockobject
~cmycriticalsection()
virtual void lock()
virtual void unlock()
private:
critical_section m_section;
};//利用析構函式解鎖
class cmylock
~cmylock()
private:
clockobject *m_plock;
};
對應的setval函式的第2版本**如下:
int setval(int ival)
else if( 2 == ival)
else
return 0; //出口點,自動呼叫mylock.~cmylock();
}
C 析構函式 虛析構函式
1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...
建構函式 析構函式 虛析構函式
說析構函式之前,先說下建構函式。建構函式用來完成對物件的一系列初始化操作,主要作用有 1.給建立的物件建立乙個識別符號 2.為物件資料成員開闢記憶體空間 3.完成物件資料成員的初始化 當並未顯示的定義建構函式時,會生成乙個預設的建構函式,預設建構函式不能完成物件資料成員的初始化,只能給物件建立一識別...
C 析構函式和虛析構函式。
析構函式如果不是虛的話,基類的析構函式將不會被呼叫。多型時,也就是派生類被基類指標所指,或者被基類別名 虛析構函式,被呼叫時,其自身的析構函式和基類的析構函式都將會被呼叫。非虛的時候,不進行多型,只有基類的會被呼叫。純虛析構函式 定義的時候除了加 0 還需要給出函式的實現。因為當遞迴的呼叫析構函式時...