• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            寶杉的博客

            UNIX/LINUX;ACE;SNMP;C++
            posts - 33, comments - 23, trackbacks - 0, articles - 0

            缺省值

            提高程序易用性,避免每次調(diào)用函數(shù)參數(shù)都相同的情況。

            缺省值只能出現(xiàn)在函數(shù)聲明中,不能在函數(shù)定義中。

            兩個(gè)原因:

            一是函數(shù)的實(shí)現(xiàn)(定義)本來(lái)就與參數(shù)是否有缺省值無(wú)關(guān),所以沒(méi)有必要讓缺省值出現(xiàn)在函數(shù)的定義體中。

            二是參數(shù)的缺省值可能會(huì)改動(dòng),顯然修改函數(shù)的聲明比修改函數(shù)的定義要方便。

            規(guī)則:參數(shù)從后向前缺省

            正確的示例如下:

            void Foo(int x, int y=0, int z=0);

            錯(cuò)誤的示例如下:

            void Foo(int x=0, int y, int z=0);  

            但要避免二義性

            C++exams\default_para

             

            運(yùn)算符重載及其規(guī)則

            運(yùn)算符即可定義為成員函數(shù),也可定義為全局函數(shù)。

            規(guī)則如下:

            運(yùn)算符

            規(guī)則

            所有的一元運(yùn)算符

            建議重載為成員函數(shù)

            = () [] ->

            只能重載為成員函數(shù)

            += -= /= *= &= |= ~= %= >>= <<=

            建議重載為成員函數(shù)

            所有其它運(yùn)算符

            建議重載為全局函數(shù)

             

            不能重載的運(yùn)算符

            1)不能改變C++內(nèi)部數(shù)據(jù)類型(如int,float等)的運(yùn)算符。

            2)不能重載‘.’,因?yàn)?span lang=EN-US>‘.’在類中對(duì)任何成員都有意義,已經(jīng)成為標(biāo)準(zhǔn)用法。

            3)不能重載目前C++運(yùn)算符集合中沒(méi)有的符號(hào),如#,@,$等。原因有兩點(diǎn),一是難以理解,二是難以確定優(yōu)先級(jí)。

            4)對(duì)已經(jīng)存在的運(yùn)算符進(jìn)行重載時(shí),不能改變優(yōu)先級(jí)規(guī)則,否則將引起混亂。

             

            函數(shù)內(nèi)聯(lián)

            目的:提高執(zhí)行效率。

            Q為什么要用?

            A提高執(zhí)行效率。

            Q如何提高?

            A宏代碼本身不是函數(shù),但使用起來(lái)象函數(shù)。預(yù)處理器用復(fù)制宏代碼的方式代替函數(shù)調(diào)用,省去了參數(shù)壓棧、生成匯編語(yǔ)言的CALL調(diào)用、返回參數(shù)、執(zhí)行return等過(guò)程,從而提高了速度。

            Q缺點(diǎn)?

            使用宏代碼最大的缺點(diǎn)是容易出錯(cuò),預(yù)處理器在復(fù)制宏代碼時(shí)常常產(chǎn)生意想不到的邊際效應(yīng)。

             

             

            例如:

            #define MAX(a, b)       (a) > (b) ? (a) : (b)

            語(yǔ)句

            result = MAX(i, j) + 2 ;

            將被預(yù)處理器解釋為

            result = (i) > (j) ? (i) : (j) + 2 ;

            由于運(yùn)算符‘+’比運(yùn)算符‘:’的優(yōu)先級(jí)高,所以上述語(yǔ)句并不等價(jià)于期望的

            result = ( (i) > (j) ? (i) : (j) ) + 2 ;

            如果把宏代碼改寫為

            #define MAX(a, b)       ( (a) > (b) ? (a) : (b) )

            則可以解決由優(yōu)先級(jí)引起的錯(cuò)誤。但是即使使用修改后的宏代碼也不是萬(wàn)無(wú)一失的,例如語(yǔ)句result = MAX(i++, j);

            將被預(yù)處理器解釋為

            result = (i++) > (j) ? (i++) : (j);

            對(duì)于C++ 而言,使用宏代碼還有另一種缺點(diǎn):無(wú)法操作類的私有數(shù)據(jù)成員

            posted @ 2007-08-13 10:21 寶杉 閱讀(220) | 評(píng)論 (0)編輯 收藏

            隱藏規(guī)則:

            “隱藏”是指派生類的函數(shù)屏蔽了與其同名的基類函數(shù),規(guī)則如下:

            1)如果派生類的函數(shù)與基類的函數(shù)同名,但是參數(shù)不同。此時(shí),不論有無(wú)virtual關(guān)鍵字,基類的函數(shù)將被隱藏(注意別與重載混淆)。

            2)如果派生類的函數(shù)與基類的函數(shù)同名,并且參數(shù)也相同,但是基類函數(shù)沒(méi)有virtual關(guān)鍵字。此時(shí),基類的函數(shù)被隱藏(注意別與覆蓋混淆)。

             

            回顧

            靜態(tài)多態(tài)性:函數(shù)重載;運(yùn)算符重載;

            動(dòng)態(tài)多態(tài)性:繼承;虛函數(shù);

             

            上述例子之所以使用指針目的是:表達(dá)一種動(dòng)態(tài)性質(zhì),即當(dāng)指針指向不同對(duì)象可以調(diào)用不同方法。但事實(shí)上不能達(dá)到這樣的效果。雖然可以強(qiáng)制指針的類型轉(zhuǎn)換((derived *p->g();),或者直接調(diào)用指向派生類的指針,但是只要將成員函數(shù)聲明為virtual就能起到這樣的作用。

            隱藏

            不同指針指向同一地址,那么指針的類型決定調(diào)用方法,還是指針指向的對(duì)象?

            例子:C++exams\hide

            可以看出,virtual函數(shù)可以實(shí)現(xiàn)不同類型的指針指向不同對(duì)象,調(diào)用不同的方法。

            就是說(shuō),當(dāng)父類對(duì)象和子類對(duì)象同時(shí)存在,且調(diào)用父子對(duì)象的同名方法時(shí),只能用虛擬函數(shù)實(shí)現(xiàn)。

             

            另外,提供一種思路:

            如果基類與派生類的同名函數(shù)參數(shù)不同,比如:

            class Base

            {

            public:

            void f(int x);

            };

            class Derived : public Base

            {

            public:

            void f(char *str);

            };

            void Test(void)

            {

            Derived *pd = new Derived;

            pd->f(10);  // error

            }

            基類為int,派生類為string.如果想在派生類中調(diào)用基類的方法,即在派生類中添加基類方法的調(diào)用。

            class Derived : public Base

            {

            public:

            void f(char *str);

            void f(int x) { Base::f(x); }

            };

            但此做法容易混亂,不宜使用。最好的方法還是用virtual

             

            指針類型

            對(duì)象類型

            面向?qū)ο髣?dòng)態(tài)的設(shè)計(jì),應(yīng)該是對(duì)象類型起到關(guān)鍵作用,而不是指針類型。

            posted @ 2007-08-13 10:16 寶杉 閱讀(140) | 評(píng)論 (0)編輯 收藏

            重載與覆蓋

            成員函數(shù)被重載的特征:

            1)相同的范圍(在同一個(gè)類中);

            2)函數(shù)名字相同;

            3)參數(shù)不同;

            4virtual關(guān)鍵字可有可無(wú)。

            覆蓋是指派生類函數(shù)覆蓋基類函數(shù),特征是:

            1)不同的范圍(分別位于派生類與基類);

            2)函數(shù)名字相同;

            3)參數(shù)相同;

            4)基類函數(shù)必須有virtual關(guān)鍵字。

            例子:C++exams\cover

            指向基類的指針可以指向其共有派生類的對(duì)象,但反之不行,另外私有派生類也不行。

            比如:車 是基類,小汽車,馬車 等是派生類。

            一個(gè)車類的指針可以指向任何派生類,因?yàn)樗鼈兌紝儆谲嚒?/span>

            而反之,不能說(shuō)指向馬車的指針可以指向車,因?yàn)檐嚨母拍钭畲蟆?/span>

            posted @ 2007-08-13 10:15 寶杉 閱讀(162) | 評(píng)論 (0)編輯 收藏

            重載(overloaded)、內(nèi)聯(lián)(inline)、constvirtual

             

             

            重載

            內(nèi)聯(lián)

            const

            virtual

            全局函數(shù)

             

             

            類的成員函數(shù)

            內(nèi)部標(biāo)識(shí)符

            編譯器根據(jù)參數(shù)為每個(gè)重載函數(shù)創(chuàng)建內(nèi)部標(biāo)識(shí)符,以便區(qū)分忽略返回值與有返回值的重載函數(shù)。

            連接交換指定符號(hào)

            C編譯過(guò)的函數(shù),經(jīng)過(guò)編譯器標(biāo)識(shí)后與C++的表示風(fēng)格不同。所以C++不能直接調(diào)用C編譯出的函數(shù)。C++提供extern “C”

            例如:

            extern “C”

            {

               void foo(int x, int y);

               … // 其它函數(shù)

            }

            或者寫成

            extern “C”

            {

               #include “myheader.h”

               … // 其它C頭文件

            }

             

            全局函數(shù)與成員函數(shù)同名

            全局函數(shù)與成員函數(shù)同名不算重載,因?yàn)楹瘮?shù)作用域不同。

            為了區(qū)別,調(diào)用全局函數(shù)時(shí),注意格式:

            ::函數(shù)名(參數(shù));

             

            隱式類型轉(zhuǎn)換導(dǎo)致重載函數(shù)產(chǎn)生二義性

            隱式類型轉(zhuǎn)換:數(shù)字本身沒(méi)有類型,把數(shù)字當(dāng)作參數(shù),自動(dòng)進(jìn)行類型轉(zhuǎn)換。

            例如:

            void output( int x);   // 函數(shù)聲明

            void output( float x); // 函數(shù)聲明

            output(0.5)將產(chǎn)生編譯錯(cuò)誤,因?yàn)榫幾g器不知道該將0.5轉(zhuǎn)換成int還是float類型的參數(shù)。

            正確寫法:

                 output(int(0.5));  // output int 0

                 output(float(0.5));    // output float 0.5

             

            posted @ 2007-08-13 10:14 寶杉 閱讀(341) | 評(píng)論 (0)編輯 收藏

            freedelete

            只是把指針?biāo)傅膬?nèi)存給釋放掉,但并沒(méi)有把指針本身干掉。

             

            注意:

            1)指針消亡了,并不表示它所指的內(nèi)存會(huì)被自動(dòng)釋放。

            2)內(nèi)存被釋放了,并不表示指針會(huì)消亡或者成了NULL指針。

            比較

            mallocfree:無(wú)法滿足動(dòng)態(tài)對(duì)象的要求。對(duì)象在創(chuàng)建同時(shí)進(jìn)行構(gòu)造,消亡同時(shí)析構(gòu)。

            malloc free是庫(kù)函數(shù),不是運(yùn)算符,不受編譯器控制。

            newdelete:不是庫(kù)函數(shù),能動(dòng)態(tài)內(nèi)存分配和清理內(nèi)存。

             

            內(nèi)存耗盡

            內(nèi)存耗盡時(shí)newmalloc返回NULL。但在WIN32下,使用虛擬內(nèi)存,不會(huì)耗盡的。

            處理內(nèi)存耗盡大概有兩種。

            A  *a = new A;

            1       一處內(nèi)存申請(qǐng)

            if(a == NULL)

            {

                 return;

                 }

            2    如果有多處申請(qǐng)內(nèi)存,則

            if(a == NULL)

            {

                 cout << Memory Exhausted << endl;

                 exit(1);

            }

             

            newdelete使用要點(diǎn)

            1 new內(nèi)置了sizeof、類型轉(zhuǎn)換和類型安全檢查功能。

            2 new在創(chuàng)建非內(nèi)部數(shù)據(jù)類型的動(dòng)態(tài)對(duì)象的同時(shí)完成了初始化工作。

            3 對(duì)象有多個(gè)構(gòu)造函數(shù),那么new的語(yǔ)句也可以有多種形式。

            例如:diary files\obj.txt

            4 如果用new創(chuàng)建對(duì)象數(shù)組,那么只能使用對(duì)象的無(wú)參數(shù)構(gòu)造函數(shù)。例如

                 Obj  *objects = new Obj[100];    // 創(chuàng)建100個(gè)動(dòng)態(tài)對(duì)象

            不能寫成

                 Obj  *objects = new Obj[100](1);// 創(chuàng)建100個(gè)動(dòng)態(tài)對(duì)象的同時(shí)賦初值1

            5在用delete釋放對(duì)象數(shù)組時(shí),留意不要丟了符號(hào)‘[]’。例如

                 delete []objects;  // 正確的用法

            delete objects;    // 錯(cuò)誤的用法

            后者相當(dāng)于delete objects[0],漏掉了另外99個(gè)對(duì)象。

            posted @ 2007-08-13 10:12 寶杉 閱讀(417) | 評(píng)論 (0)編輯 收藏

            數(shù)組要么在靜態(tài)存儲(chǔ)區(qū)被創(chuàng)建(如全局?jǐn)?shù)組),要么在棧上被創(chuàng)建。數(shù)組名對(duì)應(yīng)著(而不是指向)一塊內(nèi)存,其地址與容量在生命期內(nèi)保持不變,只有數(shù)組的內(nèi)容可以改變。

            指針可以隨時(shí)指向任意類型的內(nèi)存塊,它的特征是“可變”,所以我們常用指針來(lái)操作動(dòng)態(tài)內(nèi)存。指針遠(yuǎn)比數(shù)組靈活,但也更危險(xiǎn)。

            1 修改內(nèi)容

                   char a[] = "hello";

                   a[0] = 'X';

                   cout << a << endl;

                   char *p = "world";     // 注意p指向常量字符串

                   p[0] = 'X';                 // 編譯器不能發(fā)現(xiàn)該錯(cuò)誤

                   cout << p << endl;


            2 復(fù)制與比較

            strcpy(new type[strlen(a)+1]),而不能用p = a    //把a(bǔ)的地址給了p,而不是a的內(nèi)容

            strcmp(if strcmp(a,p)== 0),而不能用      if( a = p)  

                   // 數(shù)組…

                   char a[] = "hello";

                   char b[10];

                   strcpy(b, a);                 // 不能用       b = a;

                   if(strcmp(b, a) == 0)     // 不能用  if (b == a)

                   // 指針…

                   int len = strlen(a);

                   char *p = (char *)malloc(sizeof(char)*(len+1));

                   strcpy(p,a);                  // 不要用 p = a;

                   if(strcmp(p, a) == 0)     // 不要用 if (p == a)

            sizeof內(nèi)存容量計(jì)算

            1           sizeof(p)相當(dāng)于sizeof(char*),C++不支持對(duì)指針?biāo)竷?nèi)容容量的計(jì)算。

            char a[] = "hello world";

                char *p  = a;

                cout<< sizeof(a) << endl;   // 12字節(jié)

                cout<< sizeof(p) << endl;   // 4字節(jié)

            2           數(shù)組作為函數(shù)參數(shù),退化成同類型指針。

            void Func(char a[100])

                {

                    cout<< sizeof(a) << endl;   // 4字節(jié)而不是100字節(jié)

            }

            指針參數(shù)傳遞內(nèi)存

            首先,考慮函數(shù)為參數(shù)創(chuàng)建臨時(shí)副本的問(wèn)題。對(duì)于值傳遞,有形參和實(shí)參的區(qū)別。但對(duì)于引用和指針傳遞,則可能會(huì)產(chǎn)生問(wèn)題。

             

            指針作為函數(shù)參數(shù),不能動(dòng)態(tài)申請(qǐng)內(nèi)存。

            void GetMemory(char *p, int num)

            {

                   p = (char *)malloc(sizeof(char) * num);

            }

            void Test(void)

            {

                   char *str = NULL;

                   GetMemory(str, 100);           // str 仍然為 NULL     

                   strcpy(str, "hello");               // 運(yùn)行錯(cuò)誤

            }

            毛病出在函數(shù)GetMemory中。編譯器總是要為函數(shù)的每個(gè)參數(shù)制作臨時(shí)副本,指針參數(shù)p的副本是 _p,編譯器使 _p = p。如果函數(shù)體內(nèi)的程序修改了_p的內(nèi)容,就導(dǎo)致參數(shù)p的內(nèi)容作相應(yīng)的修改。這就是指針可以用作輸出參數(shù)的原因。在本例中,_p申請(qǐng)了新的內(nèi)存,只是把_p所指的內(nèi)存地址改變了,但是p絲毫未變。所以函數(shù)GetMemory并不能輸出任何東西。事實(shí)上,每執(zhí)行一次GetMemory就會(huì)泄露一塊內(nèi)存,因?yàn)闆](méi)有用free釋放內(nèi)存。

            如何改正:

            1 用“指向指針的指針”

            void GetMemory2(char **p, int num)          //**p

            {

                   *p = (char *)malloc(sizeof(char) * num);

            }

            void Test2(void)

            {

                   char *str = NULL;

                   GetMemory2(&str, 100);                    // 注意參數(shù)是 &str,而不是str

                   strcpy(str, "hello");

                   cout<< str << endl;

                   free(str);

            }

            2 用函數(shù)返回值來(lái)傳遞動(dòng)態(tài)內(nèi)存

            char *GetMemory3(int num)

            {

                   char *p = (char *)malloc(sizeof(char) * num);

                   return p;

            }

            void Test3(void)

            {

                   char *str = NULL;

                   str = GetMemory3(100);      

                   strcpy(str, "hello");

                   cout<< str << endl;

                   free(str);

            }

            注意

            強(qiáng)調(diào)不要用return語(yǔ)句返回指向“棧內(nèi)存”的指針

            char *GetString(void)

            {

                   char p[] = "hello world";

                   return p;  // 編譯器將提出警告

            }

            void Test4(void)

            {

            char *str = NULL;

            str = GetString();   // str 的內(nèi)容是垃圾

            cout<< str << endl;

            }

            posted @ 2007-08-03 13:08 寶杉 閱讀(200) | 評(píng)論 (0)編輯 收藏

            內(nèi)存分配方式

            1 靜態(tài)存儲(chǔ)區(qū)域           全局變量 static

            2 棧                            局部變量

            3 動(dòng)態(tài)存儲(chǔ)區(qū)域(堆)(malloc free) (new delete)

             

            常見錯(cuò)誤和對(duì)策

            1 內(nèi)存分配未成功。

            對(duì)策:程序入口處,檢查指針是否為NULL。

            (1)參數(shù)*p所指向的內(nèi)存,用assert( p != NULL)

            (2)malloc或new申請(qǐng)的內(nèi)存,用if ( p != NULL)

            2 內(nèi)存未初始化。

            3 內(nèi)存操作越界。

            4 忘記釋放內(nèi)存,內(nèi)存泄露。

            new與delete配對(duì)。

            5 釋放內(nèi)存,卻繼續(xù)使用。

                   (1)return不能返回“棧內(nèi)存指針”和“引用”,因?yàn)樵搩?nèi)存在函數(shù)結(jié)束時(shí)被銷毀。

                   (2)釋放內(nèi)存后,設(shè)為NULL,防止“野指針”。

            規(guī)則

            1 申請(qǐng)內(nèi)存后檢查。assert( p != NULL)

            2 數(shù)組、動(dòng)態(tài)內(nèi)存初始化。

            3 申請(qǐng)釋放要配對(duì)。

            4 釋放內(nèi)存設(shè)置NULL,防止產(chǎn)生野指針。

            posted @ 2007-08-03 13:06 寶杉 閱讀(187) | 評(píng)論 (0)編輯 收藏

            引用的主要作用:傳遞函數(shù)的參數(shù)和返回值。

            C++語(yǔ)言中,函數(shù)的參數(shù)和返回值的傳遞方式有三種:值傳遞、指針傳遞和引用傳遞。

            值傳遞

            函數(shù)內(nèi)的形參是實(shí)參(外部變量)的一個(gè)拷貝,所以不會(huì)影響實(shí)參(外部變量)的值。

                void Func1(int x)

            {

                x = x + 10;

            }

            int n = 0;

                Func1(n);

                cout << “n = ” << n << endl;  // n = 0

            指針傳遞

                void Func2(int *x)

            {

                (* x) = (* x) + 10;

            }

            int n = 0;

                Func2(&n);

                cout << “n = ” << n << endl;      // n = 10

            引用傳遞

                void Func3(int &x)

            {

                x = x + 10;

            }

            int n = 0;

                Func3(n);

                cout << “n = ” << n << endl;      // n = 10

            指針功能強(qiáng)大,但非常危險(xiǎn)。恰如其分的使用“引用”,發(fā)揮其作用。

            一般先考慮“引用”,如果“引用”不能做的事,則再用“指針”來(lái)完成。

            posted @ 2007-08-03 13:05 寶杉 閱讀(194) | 評(píng)論 (0)編輯 收藏

            pragma就是為了讓編譯器編譯出的C或C++程序與機(jī)器硬件和操作系統(tǒng)保持完全兼容而定義的宏擴(kuò)展,#pragma是和特定編譯器相關(guān)的。

             

            一、Pragma說(shuō)明(Directives)

            C和C++程序的每次執(zhí)行都支持其所在的主機(jī)或操作系統(tǒng)所具有的一些獨(dú)特的特點(diǎn)。
            一些程序,例如,需要精確控制數(shù)據(jù)存放的內(nèi)存區(qū)域或控制某個(gè)函數(shù)接收的參數(shù)。
            #pragma指示為編譯器提供了一種在不同機(jī)器和操作系統(tǒng)上編譯以保持C和C++完全兼容的方法。Pragmas是由機(jī)器和相關(guān)的操作系統(tǒng)定義的,通常對(duì)每個(gè)編譯器來(lái)說(shuō)是不同的。

             

            二、語(yǔ)法(Syntax)

            #pragma token-string(特征字符串)特征字符串是一連串的字符,就是要給一個(gè)特定編譯器提供說(shuō)明和編譯意見。

            符號(hào)(#)必須是pragma所在那一行的第一個(gè)非空格字符;
            #號(hào)和pragma之間可以有任意個(gè)空格符。
            在#pragma之后,是可以被編譯器解析的預(yù)處理特征字符。
            一般認(rèn)為,#pragma屬于宏擴(kuò)展。
            如果編譯器發(fā)現(xiàn)不認(rèn)識(shí)的pragma,會(huì)提出警告,但繼續(xù)編譯下去。

            Pragmas可以用在條件聲明上,提供最新的功能性的預(yù)處理程序,或者提供給編譯器定義執(zhí)行的信息。

            其格式一般為: #pragma  para 

            其中para為參數(shù),下面來(lái)看一些常用的參數(shù)。


            alloc_text
            comment //注釋
            init_seg1 
            optimize  //最優(yōu)化
            auto_inline
            component  //組成部件
            inline_depth
            pack       //包
            bss_seg
            data_seg
            inline_recursion  //內(nèi)嵌遞歸
            pointers_to_members1
            check_stack
            function   
            intrinsic  //內(nèi)在的
            setlocale
            code_seg
            hdrstop
            message 
            vtordisp1
            const_seg
            include_alias
            once
            warning


             

            參數(shù)詳解

            diary files\#pragma  預(yù)處理指令詳解.doc

            posted @ 2007-08-03 13:04 寶杉 閱讀(281) | 評(píng)論 (0)編輯 收藏

               * 非遞歸鎖:非遞歸鎖提供互斥的一種高效的形式,它定義一個(gè)臨界區(qū),每一時(shí)刻只有單個(gè)線程可在其中執(zhí)行。它們之所以是非遞歸的,是因?yàn)楫?dāng)前擁有鎖的線程在將其釋放前不可以再次獲取它。否則,就會(huì)立即發(fā)生死鎖。SunOS 5.x通過(guò)它的mutex_trwlock_t,和sema_t類型(POSIX Pthreads不提供后兩種同步機(jī)制)為非遞歸鎖提供支持。ASX構(gòu)架提供MutexRW_Mutex,和Semaphore包裝,以分別封裝這些語(yǔ)義。

               * 遞歸鎖:另外一方面,遞歸鎖允許acquire方法嵌套調(diào)用,只要當(dāng)前擁有該鎖的線程就是試圖重新獲取它的線程。遞歸鎖對(duì)于回調(diào)驅(qū)動(dòng)的事件分派構(gòu)架(比如1.3.2描述的反應(yīng)堆)特別有用,在其中構(gòu)架的事件循環(huán)執(zhí)行對(duì)預(yù)登記的用戶定義的對(duì)象的回調(diào)。因?yàn)殡S后用戶定義的對(duì)象可能經(jīng)由它的方法入口重入分派構(gòu)架,必須使用遞歸鎖以防止在回調(diào)過(guò)程中構(gòu)架持有的鎖發(fā)生死鎖。

            posted @ 2007-08-03 13:03 寶杉 閱讀(3592) | 評(píng)論 (2)編輯 收藏

            僅列出標(biāo)題
            共4頁(yè): 1 2 3 4 
            99麻豆久久久国产精品免费| 97久久超碰国产精品旧版| 久久无码精品一区二区三区| 久久久久99精品成人片牛牛影视| 欧美性大战久久久久久| 久久精品无码午夜福利理论片| 成人资源影音先锋久久资源网| 精品久久久久久久久久久久久久久| 久久精品极品盛宴观看| 91精品国产综合久久精品| 日本亚洲色大成网站WWW久久| 久久久久国产精品嫩草影院| 国产精品永久久久久久久久久| 久久精品国产亚洲av麻豆蜜芽| 亚洲天堂久久精品| 久久国产免费直播| 久久免费香蕉视频| 国产精品99久久精品| 久久受www免费人成_看片中文| 国产91色综合久久免费| 无码人妻久久久一区二区三区| 久久国产免费| 久久综合九色综合精品| 亚洲精品乱码久久久久久中文字幕| 久久国产成人午夜aⅴ影院| 久久91精品国产91久久户| 亚洲va中文字幕无码久久| 久久综合色之久久综合| 精品无码人妻久久久久久| 7国产欧美日韩综合天堂中文久久久久| 久久亚洲AV无码精品色午夜 | 久久久久亚洲精品日久生情| 精品国产热久久久福利| 久久亚洲高清观看| 亚洲国产精品久久久久婷婷软件 | 免费精品久久天干天干| 国内精品伊人久久久久妇| 久久亚洲AV永久无码精品| 亚洲七七久久精品中文国产| 久久se精品一区二区影院 | 久久精品国产只有精品2020|