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