青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 181  文章 - 15  trackbacks - 0
<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

My Tech blog

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

在這一部分之前,書中介紹了基本類型的顯式初始化以及簡單的異常處理.
基本類型的顯式初始化是比較簡單的.就是說你在定義一個整型變量的時候,有兩種不同的情況:
int i1;         // undefined value
int i2 = int(); // initialized with zero

如果按照前一種,會作"值未定義;如果按照后一種,則自動被初始化為0.這樣也就確保了你的類在初始化的時候有一個確定的初始值.
至于異常的處理等問題,書中會在后面有比較詳細的描述.這里可以看到比較有意思的一點,就是指定函數拋出的異常類型,這于Java很像:
void f() throw(bad_alloc);
下面轉入正題:命名空間.
有了命名空間,它將會取代函數和類作用于全局,并作為它所統領的那些類和函數的唯一標識存在.這樣可以避免命名沖突情況的出現.正如書中所說:
Unlike classes, namespaces are open for definitions and extensions in different modules. Thus
you can use namespaces to define modules, libraries, or components even by using multiple
files. A namespace defines logical modules instead of physical modules (in UML and other
modeling notations, a module is also called a package).

可以像這樣定義一個命名空間:
namespace MyNameSpace
{
    
class MyClass
    {
        
private:
        
char * _classInfo;
        
public:
        
char* getClassInfo()
        {
            
return _classInfo;
        }
        MyClass(
const char* info)
        {
            _classInfo
=new char[strlen(info)];
            strcpy(_classInfo,info);
        }
        
~MyClass()
        {
            
if(_classInfo)
            {
                std::cout
<<"free classinfo";
                delete[] _classInfo;
            }
        }
    };
    
void printMyClassInfo(MyClass &instance)
    {
        std::cout
<<instance.getClassInfo();
    }
}
從上面可以看出,這個命名空間里面包括了一個類和一個函數.類中包含了char*類型的成員變量.函數printMyClassInfo 以一個MyClass類型的引用作為參數.為什么要用引用呢?熟悉c++的人應當很清楚,我是通過實驗才剛剛知道原因.這個原因我將會在后面說明.
好現在來看一下調用過程,通常的調用過程是這樣的:
int main()
{
    MyNameSpace::MyClass instance(
"MyClass!\n");
    MyNameSpace::printMyClassInfo(instance);
}
這沒有任何問題,但有意思的是,還可以這樣調用:
int main()
{
    MyNameSpace::MyClass instance(
"MyClass!\n");
    printMyClassInfo(instance);
}
看來c++中在使用一個命名空間的類或者函數的時候,這個命名空間就被"自動"引入了.當尋找函數printMyClassInfo的時候會在當前的上下文中進行尋找的同時,還會到以前用到過的命名空間中去尋找.
當然,通常情況下我們喜歡這樣做:
using namespace MyNameSpace; 
int main()
{
    MyClass instance(
"MyClass!\n");
    printMyClassInfo(instance);

}
但是并不是在任何情況下都鼓勵using namespace這種做法的.在書中將得比較清楚:
Note that you should never use a using directive when the context is not clear (such as in header
files, modules, or libraries). The directive might change the scope of identifiers of a namespace,
so you might get different behavior than the one expected because you included or used your
code in another module. In fact, using directives in header files is really bad design.

上面這段話強調了當上下文并不明確的情況下(比如在一個頭文件,組件或者庫里面),不要使用using這種寫法,這個指令會改變命名空間標識符的作用域,這樣你就有可能引發和你預期不相同的行為,因為你會在另外一個組件中引用你的代碼或使用它.事實上,將using標識符寫在頭文件里面是一種相當不好的設計.
在這里,我看了一下c++程序設計語言這本書,發現命名空間除了像上面這樣聲明以外,還可以像類一樣這樣來寫:
在命名空間中這樣定義
void printMyClassInfo(MyClass &);
然后在外面寫函數的主體
void MyNameSpace::printMyClassInfo(MyClass &instance)
{
    std::cout
<<instance.getClassInfo();
}
好了,寫了這么多,再來看看剛才留下來的那個問題.
其實很簡單,一個函數如果傳遞的是值,那么就會在內存中產生一個一模一樣的"復本",而那個字符指針也會被復制一次.當傳送的值超過它的作用域的時候 ,就會被釋放掉,而被復制的"本體"在程序運行結束之后,又會被"釋放一次".這樣在運行的時候,它會提示你這樣的錯誤:
*** glibc detected *** double free or corruption (fasttop): 0x0804a008 ***

在我們的MyClassl類的析構中,我們有一個輸出,所以這里就輸出了兩次:
free classinfofree classinfo




posted on 2007-06-14 22:06 littlegai 閱讀(303) 評論(0)  編輯 收藏 引用 所屬分類: 我的讀書筆記
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一区二区网站| 欧美一区二视频| 狼狼综合久久久久综合网 | 欧美婷婷久久| 欧美亚洲综合另类| 久久亚洲私人国产精品va| 亚洲精品午夜| 亚洲欧美制服另类日韩| 亚洲精品欧洲精品| 性视频1819p久久| 一本到12不卡视频在线dvd| 亚洲天堂免费在线观看视频| 在线播放国产一区中文字幕剧情欧美| 亚洲免费观看| 在线看片日韩| 午夜精品久久久久久久男人的天堂| 亚洲国产经典视频| 亚洲在线1234| 一区二区三区精品视频| 久久久精品午夜少妇| 亚洲欧美中文字幕| 欧美人与禽猛交乱配视频| 另类天堂av| 国产视频久久| 亚洲综合99| 在线亚洲成人| 欧美成人一区二区三区片免费| 久久精品五月| 国产精品在线看| 在线天堂一区av电影| 日韩午夜中文字幕| 美女91精品| 麻豆91精品| 伊大人香蕉综合8在线视| 亚洲欧美久久久| 性欧美18~19sex高清播放| 欧美精品91| 亚洲国产精品电影| 国产精品私房写真福利视频| 日韩视频在线免费观看| 亚洲另类一区二区| 欧美大片免费观看| 国产欧美精品| 国产精品99久久久久久www| 国产一区二区在线免费观看 | 欧美午夜欧美| 日韩视频在线观看国产| 99精品欧美一区| 欧美成人一区在线| 最新日韩av| 亚洲美女色禁图| 欧美精品二区| 日韩亚洲欧美一区| 亚洲综合激情| 国产日韩欧美不卡| 久久国内精品自在自线400部| 久久精品中文字幕一区| 国内欧美视频一区二区| 久久久久久久久岛国免费| 麻豆国产精品一区二区三区| 亚洲电影免费观看高清完整版| 快播亚洲色图| 亚洲日韩第九十九页| 一片黄亚洲嫩模| 国产精品久久久久一区二区三区共| 亚洲午夜91| 久久久久一区二区三区| 一区视频在线播放| 欧美福利视频| 在线性视频日韩欧美| 久久精品99国产精品| 黑人巨大精品欧美一区二区小视频 | 久久精品国产v日韩v亚洲| 麻豆成人在线| 一区二区毛片| 国产欧美 在线欧美| 久久亚洲精品一区二区| 亚洲人精品午夜| 亚洲欧美一区二区三区久久| 国产日韩亚洲欧美精品| 久色婷婷小香蕉久久| 一区二区国产日产| 久久久久看片| 99视频精品全部免费在线| 国产精品女主播一区二区三区| 久久精品1区| 99re热这里只有精品免费视频| 欧美在线一二三四区| 亚洲国产精品成人一区二区| 欧美涩涩视频| 看欧美日韩国产| 亚洲伊人久久综合| 欧美国产激情| 欧美一区二区视频免费观看 | 香蕉av福利精品导航| 欧美成va人片在线观看| 午夜精品久久久久久久99水蜜桃 | 欧美专区在线观看| 欧美成年人视频| 午夜在线播放视频欧美| 欧美大尺度在线| 校园激情久久| 日韩视频―中文字幕| 国产综合在线看| 欧美视频三区在线播放| 裸体素人女欧美日韩| 午夜精品久久久久久| 亚洲日韩视频| 欧美 日韩 国产一区二区在线视频 | 最近中文字幕日韩精品| 久久精品女人| 亚洲一区视频| 亚洲日本无吗高清不卡| 国产在线精品成人一区二区三区| 欧美日韩精品一二三区| 欧美gay视频| 久久精品国产一区二区三| 亚洲一区视频在线| 一区二区av在线| 亚洲精品网站在线播放gif| 欧美成人午夜视频| 老鸭窝91久久精品色噜噜导演| 欧美在线黄色| 欧美诱惑福利视频| 亚洲欧美日韩一区二区三区在线观看 | 久久久久免费视频| 亚洲视频在线一区观看| 亚洲精品日韩欧美| 亚洲高清不卡在线| 精品福利免费观看| 国产亚洲欧洲| 国产主播一区二区三区四区| 国产欧美日本一区视频| 国产美女精品视频免费观看| 国产精品露脸自拍| 国产精品家庭影院| 国产精品久久久久高潮| 国产精品av久久久久久麻豆网| 欧美精品亚洲| 欧美乱妇高清无乱码| 欧美精品一区二区三区在线播放| 免费精品99久久国产综合精品| 久久综合九色综合欧美狠狠| 久久综合狠狠综合久久综青草| 久久久91精品国产一区二区精品| 久久精品99国产精品酒店日本| 久久精品人人做人人综合| 欧美一区二区三区视频在线| 久久9热精品视频| 久久精品国产第一区二区三区最新章节| 午夜一区二区三视频在线观看| 久久精品视频网| 久久男女视频| 欧美精品午夜视频| 国产精品欧美在线| 国产一区三区三区| 91久久精品国产91久久| 99精品久久久| 亚洲欧美电影在线观看| 久久激情视频| 欧美成人高清| 亚洲剧情一区二区| 亚洲男人影院| 久久影音先锋| 欧美日韩另类视频| 国产农村妇女毛片精品久久莱园子| 亚洲日本欧美天堂| 欧美成人免费在线观看| 亚洲日本一区二区| 亚洲午夜精品视频| 久久精品国产久精国产一老狼 | 亚洲小说春色综合另类电影| 午夜精品久久久久久久99热浪潮 | 国产精品久久久久免费a∨大胸 | 亚洲一级高清| 久久久久久9999| 欧美日韩国产欧| 国产一区深夜福利| 一本色道久久99精品综合| 性刺激综合网| 亚洲国内欧美| 午夜精彩国产免费不卡不顿大片| 久久在线91| 国产精品一区三区| 亚洲日韩欧美一区二区在线| 性欧美办公室18xxxxhd| 欧美成ee人免费视频| 亚洲免费在线视频一区 二区| 猛干欧美女孩| 国产性做久久久久久| 亚洲老板91色精品久久| 久久久久久久性| 一本色道久久综合亚洲精品不| 久久国产欧美日韩精品| 国产精品成人免费| 亚洲人成网站在线观看播放| 久久久成人精品| 夜夜躁日日躁狠狠久久88av| 麻豆成人小视频| 国产有码一区二区|