re: 學好c++50條[未登錄] martin_yahoo 2009-03-20 14:16
說的不錯.
re: 應用系統中的定時器設計 martin_yahoo 2009-03-18 15:45
因為該代碼實例是從Drawin,ICE等應用中摘要而出,但這些系統可能為了系統的需要,進行了一些比較復雜的設計.其實你只要在意原理就行,也就是僅這一段即可:
上面所介紹的,主要是些數據結構. 定時器設計的關鍵部分如下: ....
re: 智能指針的代碼實例[未登錄] martin_yahoo 2009-03-09 18:01
u r right. These souce code is abstracted from ICE.
re: C++中的智能指針[未登錄] martin_yahoo 2009-03-09 16:19
@abettor
你可以參閱:
智能指針的代碼實例
re: C++中的智能指針[未登錄] martin_yahoo 2009-03-09 15:14
@陳梓瀚(vczh)
class T; //雙向鏈表的節點類
class T_var; //為指向對象T的智能指針類.
class T_list; //雙向鏈表數據結構類
假設class T為雙向鏈表上的節點,故它的定義可以簡單地用如下方式表示:
calss T{
....
private:
T_var beforePtr;
T_var nextPtr;
};
現在考慮三個節點:N ,N1,N2節點.
N節點的nextPtr指向N1, beforePtr指向其它節點
(如果N節點前面沒有其它節點,此時只有N1節點引用它,則它的引用計數為1;如果前面還有還有其它節點,則它的引用計數為2).
N1節點的nextPtr指向N2, beforePtr指向N節點.
(N1節點的引用計數為2).
N2節點的nextPtr指向其它節點, beforePtr指向N1節點.
(如果N節點后面沒有其它節點,此時只有N1節點引用它,則它的引用計數為1;如果后面還有還有其它節點,則它的引用計數為2).
現在假設要刪除N1節點, 把N2節點中的beforePtr指向N,
則N節點的引用計數增加一,N1節點的引用計數減少1,變成1.
把N節點的nextPtr指向N2節點,則N2的引用計數增加一,N1節點的引用計數減少1,從而N1節點的引用計數被降到0,N1節點將被自動摧毀.
此時,N,N2節點的引用計數將各自減一.維持與N節點存在是一致.這種情況下沒完蛋.
考慮到在類T_list中包含有雙向鏈表的首,尾地址.因此在一般情況下,各節點的引用計數都為2.
因此,對于首,尾節點的操作與N1節點一致.
re: C++同步鎖管理的一種方法[未登錄] martin_yahoo 2009-03-06 15:48
m_lock 中含有一些成員不能更改,故采用了const修飾,對于加瑣和釋放部分利用mutable修飾.
re: C++同步鎖管理的一種方法[未登錄] martin_yahoo 2009-03-06 13:26
@Matrixcoding
至于異常處理,那就根據業務的需要進行異常處理就可以了.
至于const引用,就是避免在應用中對Guard中的成員m_lock進行更改.如果可以進行更改,則可能應用中多個線程要對同一資源加鎖,可以更改后,可能處理的不是同一個鎖,從而不能對資源進行有效地保護.
re: C/C++混合編程[未登錄] martin_yahoo 2009-03-05 23:20
@cdy20
只不過是在c頭文件中已經加上了如下類似的語句:
#ifdef _c_plus_plus
extern "C"{
#endif
.....
#ifdef _c_plus_plus
}
#endif
如果在c語言的頭文件中加上述語句, 就應象采用隨筆中提到的做法.
re: C++的一些基礎知識[未登錄] martin_yahoo 2009-03-05 22:00
@Sandy
第一種情況
class B : private A
{
....
};
B 從A私有繼承.
第二種情況:
class B{
...
private:
A a;
...
};
B含有一個A對象為實例,并且為B的私有成員.
re: C++同步鎖管理的一種方法[未登錄] martin_yahoo 2009-03-05 09:35
@S.l.e!ep.¢%
如果程序在m_lock.acquire()處鎖失敗,則應用在此hang住,直到其他線程釋放資源,并被該線程獲取為止.此時這個線程會把資源所定.