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

隨筆 - 181  文章 - 15  trackbacks - 0
<2007年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用鏈接

留言簿(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 閱讀(292) 評論(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>
            欧美日韩成人在线| 亚洲欧美综合v| 国产精品电影在线观看| 欧美大胆a视频| 欧美bbbxxxxx| 欧美日韩免费观看一区二区三区| 欧美精品日韩www.p站| 欧美日韩亚洲成人| 国产精品亚洲激情| 国产在线拍偷自揄拍精品| 狠狠色狠色综合曰曰| 亚洲国内自拍| 这里只有精品电影| 久久精品成人一区二区三区| 亚洲最快最全在线视频| 一区二区三区视频免费在线观看| 亚洲精华国产欧美| 99re这里只有精品6| 亚洲一区在线观看免费观看电影高清| 午夜精品一区二区三区在线播放| 久久亚洲春色中文字幕久久久| 狂野欧美一区| 国产欧美日韩精品专区| 伊人精品成人久久综合软件| 亚洲丝袜av一区| 另类春色校园亚洲| 亚洲少妇诱惑| 老司机免费视频一区二区| 国产精品福利网站| 亚洲欧洲日本在线| 久久久久看片| 亚洲视频综合| 欧美日韩伦理在线免费| 一区二区三区在线免费观看| 亚洲男人的天堂在线观看| 欧美成人小视频| 性欧美激情精品| 国产精品成人观看视频免费 | 欧美午夜视频在线观看| 尤物yw午夜国产精品视频| 亚洲影视在线| 亚洲人在线视频| 裸体女人亚洲精品一区| 国产手机视频精品| 欧美中文字幕久久| 日韩午夜激情av| 欧美~级网站不卡| 精品91在线| 久久久久久久激情视频| 正在播放日韩| 国产精品乱人伦一区二区| 一区二区欧美日韩| 亚洲高清不卡在线| 蜜臀av一级做a爰片久久| 国内免费精品永久在线视频| 羞羞答答国产精品www一本| 欧美午夜不卡在线观看免费| 国外成人在线| 久久精品国产一区二区三区| 亚洲午夜在线观看| 国产精品一区2区| 午夜精品久久久久久| 在线综合欧美| 国产精品高潮呻吟| 亚洲欧美日韩在线综合| 亚洲午夜精品在线| 国产精品亚洲а∨天堂免在线| 亚洲欧美日韩精品综合在线观看| 一区二区高清视频在线观看| 久久久亚洲国产美女国产盗摄| 欧美亚洲在线| 亚洲欧美www| 久久免费视频在线| 韩国av一区| 欧美激情aaaa| 欧美精品七区| 亚洲欧美国产毛片在线| 亚洲欧美日韩一区二区在线 | 亚洲精品国产无天堂网2021| 最新中文字幕一区二区三区| 欧美激情一区二区三级高清视频| 最新亚洲一区| 一区二区三区毛片| 国语精品一区| 亚洲激情网址| 国产精品一区在线播放| 葵司免费一区二区三区四区五区| 久久亚洲综合| 亚洲影院在线| 久久久久免费观看| 亚洲图片你懂的| 性欧美video另类hd性玩具| 亚洲精品视频二区| 欧美一区二区三区在线观看| 99国产精品99久久久久久| 亚洲欧美日韩专区| 日韩小视频在线观看| 香港成人在线视频| 夜夜狂射影院欧美极品| 久久国产欧美精品| 亚洲一级免费视频| 美女视频黄免费的久久| 久久av老司机精品网站导航| 嫩草国产精品入口| 欧美一区二区免费观在线| 欧美高清视频一区二区| 国产精品久久九九| 欧美国产精品专区| 国产欧美在线视频| 一区二区三区视频观看| 亚洲免费观看高清完整版在线观看熊| 性xx色xx综合久久久xx| 亚洲一区二区三区四区在线观看 | 米奇777在线欧美播放| 国产精品久久久| 最新国产成人在线观看| 伊人久久大香线| 欧美一级在线播放| 欧美亚洲免费高清在线观看| 欧美黑人国产人伦爽爽爽| 久久久久久午夜| 国产欧美在线视频| 亚洲资源av| 亚洲综合首页| 欧美视频网址| 一本色道久久88亚洲综合88| 亚洲精品免费在线| 久久综合久久综合久久| 久久久久久久综合| 久久亚洲私人国产精品va媚药| 亚洲欧美一区二区激情| 亚洲一区二区综合| 欧美日韩国产在线播放网站| 亚洲欧洲偷拍精品| 日韩视频精品| 免费亚洲一区| 亚洲国产第一| 亚洲精品久久嫩草网站秘色| 噜噜噜噜噜久久久久久91| 欧美激情视频给我| 亚洲欧洲一区二区在线播放| 久久一区激情| 亚洲激情一区二区三区| 一本色道久久综合亚洲精品高清| 欧美激情一区二区三区成人| 亚洲国产天堂网精品网站| 亚洲免费高清视频| 欧美日韩在线视频首页| 亚洲一区二区三区四区在线观看 | 巨胸喷奶水www久久久免费动漫| 久久婷婷麻豆| 亚洲国产精品123| 欧美国产视频在线| 欧美成人一区二区三区在线观看| 亚洲国产另类久久久精品极度| 亚洲毛片播放| 国产精品不卡在线| 欧美在线日韩| 最新中文字幕亚洲| 久久av一区二区三区漫画| 黑人一区二区三区四区五区| 久久亚洲综合网| 在线亚洲免费视频| 久久嫩草精品久久久精品一| 亚洲欧洲日韩在线| 国产精品久久久久9999高清| 欧美亚洲一区在线| 亚洲精品久久久久久久久久久久久| 亚洲免费视频成人| 亚洲第一成人在线| 欧美日韩在线影院| 久久久久久夜| 亚洲小视频在线| 欧美国产亚洲另类动漫| 亚洲综合三区| 亚洲国产99精品国自产| 国产精品美女www爽爽爽视频| 久久成人久久爱| 99伊人成综合| 欧美激情精品久久久久久黑人| 欧美亚洲视频在线观看| 亚洲日本va午夜在线电影| 国产精品亚洲аv天堂网 | 精品电影在线观看| 国产精品扒开腿做爽爽爽视频 | 欧美在线亚洲综合一区| 亚洲精品小视频| 激情伊人五月天久久综合| 欧美性事在线| 欧美激情片在线观看| 久久久久久久精| 篠田优中文在线播放第一区| 99视频精品免费观看| 亚洲国产高潮在线观看| 久久色在线观看| 久久琪琪电影院| 亚洲视频欧洲视频| 亚洲精品影院| 亚洲激情影院| 欧美激情91|