• <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>

            勤能補(bǔ)拙,Expter

            成都游戲Coder,記錄游戲開發(fā)過(guò)程的筆記和心得!

            一些代碼總結(jié)(特化類的友元模板重載,常見內(nèi)存泄漏)

            A.特化類的友元模板函數(shù)的操作符重載

            最近寫一測(cè)試代碼關(guān)于特化類的友元模板函數(shù)的操作符重載遇到一問(wèn)題。
            先貼一個(gè)錯(cuò)誤代碼:
             1#pragma region 類DTest信息
             2
             3// 聲明一個(gè)類
             4template<class Type , int dim>
             5class DTest
             6{
             7public:
             8    // 構(gòu)造函數(shù)
             9    DTest()
            10    {
            11        memset(_cords,0,sizeof(_cords));
            12    }

            13    DTest(Type cord[dim])
            14    {
            15        memcpy(_cords,cord,sizeof(cord));
            16    }

            17
            18    // 友元模板
            19    friend ostream & operator << (ostream & out , const DTest<Type,dim> & data);
            20
            21private:
            22  Type _cords[dim];
            23}
            ;
            24// 友元模板的實(shí)現(xiàn)
            25template<class Type, int dim>
            26ostream & operator << (ostream & out , const DTest<Type,dim> & data)
            27{
            28    for(int i = 0 ; i < dim-1 ; i++)
            29        out << data._cords[i] <<" ";
            30
            31    out <<endl;
            32    return out;
            33}

            34
            35#pragma endregion


            用devc++,Vs2005,vc2008都不能編譯通過(guò),報(bào)連接錯(cuò)誤,或者報(bào)模板函數(shù)是一個(gè)普通非模板類,或者非模板函數(shù)。

            于是翻開C++  Primer,在16.4節(jié)有詳細(xì)的說(shuō)明,
            1.對(duì)于一個(gè)特化的類,聲明一個(gè)友元模板必須對(duì)友元模板授予類的一個(gè)實(shí)例。
            2.對(duì)特定實(shí)例化的友元關(guān)系時(shí),必須在可以用于友元聲明之前聲明類或函數(shù)。

            所以下面是修改后的代碼

             1template<class Type , int dim>
             2class DTest;
             3template<class Type , int dim>
             4ostream & operator << (ostream &out ,const DTest<Type,dim> &sess);
             5
             6
             7#pragma region 類DTest信息
             8template<class Type , int dim>
             9class DTest
            10{
            11public:
            12        // 構(gòu)造函數(shù)
            13    DTest()
            14    {
            15        memset(_cords,0,sizeof(_cords));
            16    }

            17    DTest(Type cord[dim])
            18    {
            19        memcpy(_cords,cord,sizeof(cord));
            20    }

            21
            22        // 特化時(shí),<Type,dim> 省略為<>
            23    friend ostream & operator << <>(ostream & out , const DTest<Type,dim> & data);
            24
            25private:
            26  Type _cords[dim];
            27}
            ;
            28
            29// 友元模板的實(shí)現(xiàn)
            30template<class Type, int dim>
            31ostream & operator << (ostream & out , const DTest<Type,dim> & data)
            32{
            33    for(int i = 0 ; i < dim-1 ; i++)
            34        out << data._cords[i] <<" ";
            35
            36    out <<endl;
            37    return out;
            38}

            39#pragma endregion

             



            B. 常見的幾種內(nèi)存泄漏
              1.分配空間未釋放
              2.嵌套對(duì)象指針未釋放,
                   比如,一個(gè)類中包含另一個(gè)類的指針,在初始化的時(shí)候分配空間,缺沒(méi)有在析構(gòu)函數(shù)釋放他。
              3.釋放一個(gè)對(duì)象數(shù)組的時(shí)候沒(méi)有使用[] ,
                   delete m_pObj; 只是釋放第一個(gè)&m_pObj[0] 對(duì)象,應(yīng)該使用delete [] m_pObj;
              4.出現(xiàn)淺拷貝現(xiàn)象
              5.返回一個(gè)動(dòng)態(tài)分配的對(duì)象,其實(shí)可以看【effective c++】 的條款23: 必須返回一個(gè)對(duì)象時(shí)不要試圖返回一個(gè)引用
                

            先總結(jié)這些,以后慢慢記錄我的學(xué)習(xí)筆記。


                 

             

            posted on 2009-04-22 22:21 expter 閱讀(766) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 其他學(xué)習(xí)筆記 、工作筆記 、算法與數(shù)據(jù)結(jié)構(gòu)

            丁香五月综合久久激情| 色婷婷久久久SWAG精品| 精品免费tv久久久久久久| 91精品国产91久久久久久蜜臀 | 久久国产福利免费| 久久国产精品无| 国产亚洲欧美精品久久久| 国产成人久久精品二区三区| 欧美精品一区二区久久| 久久天天躁狠狠躁夜夜躁2O2O| 99久久99久久精品国产| 久久久国产99久久国产一| 99麻豆久久久国产精品免费| 亚洲欧美国产精品专区久久| 精品精品国产自在久久高清 | 久久久久99精品成人片试看| 狠狠色丁香婷婷综合久久来来去 | 久久久久亚洲AV成人网人人网站 | 蜜臀av性久久久久蜜臀aⅴ麻豆 | 成人综合久久精品色婷婷| 久久精品男人影院| 亚洲国产一成人久久精品| 久久久久国产精品嫩草影院 | 精品久久久久久中文字幕| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 国产成人AV综合久久| 亚洲AV日韩精品久久久久久久| 久久久免费观成人影院| 人人狠狠综合久久亚洲88| 久久婷婷五月综合97色| 国内高清久久久久久| 婷婷国产天堂久久综合五月| 伊人色综合久久| 日韩精品久久久久久| 精品久久一区二区| 国内精品伊人久久久久av一坑| 麻豆精品久久久久久久99蜜桃| 久久亚洲精品国产亚洲老地址 | 亚洲国产精品无码久久一线 | 免费一级做a爰片久久毛片潮| 9久久9久久精品|