• <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>
            posts - 195,  comments - 30,  trackbacks - 0

            原文地址:blog.csdn.net/jphaoren/archive/2010/06/12/5667181.aspx

            類對象數組初始化

                如有一個如下類:
                class EquipmentPiece {
                private:
                    int IDNumber;
                public:
                    EquipmentPiece(int IDNumber) : IDNumber(IDNumber) {}
            ;
                };

             

                以下列出幾種初始化的方法:
                <
            >、對象數組
                    int ID1, ID2, ID3;
                    EquipmentPiece bestPieces[] = { EquipmentPiece(ID1), EquipmentPiece(ID2), EquipmentPiece(ID3) };

                注意:
                    EquipmentPiece bestPieces[10];    //no appropriate default constructor available
                    EquipmentPiece *bestPieces = new EquipmentPiece[10];    //no appropriate default constructor available
               
            當然,如果你將構造函數參數全都設了默認值,以上兩種寫法也成功,如將類中構造函數修改如下:
                    ...
                    EquipmentPiece(int IDNumber = 0) : IDNumber(IDNumber) {};
                    ...


                <
            >、指針數組
                    typedef EquipmentPiece* PEP;    //PEP
            是個指向EquipmentPiece的指針

                    PEP bestPieces[10];                //等同于 PEP *bestPieces = new PEP[10];

                    //然后初始化
                    for(int i = 0; i < 10; i++){
                        bestPieces[i] = new EquipmentPiece( IDNumber );
                    }

                注意:
                   
            要記得將此數組所指的所有對象刪除。如果忘了會產生資源泄露。還有就是該方法與對象數組相比需要額外內存用于存放指針。(過度使用內存 這一問題可以避免,見第三種方法)


                <
            >、使用placement new
                   
            方法是:先為此數組分配raw memory,然后使用"placement new"在這塊內存上構造EquipmentPiece objects;

                    //分配足夠的raw memory,給一個預備容納10EquipmentPiece objects的數組使用
                    void *rawMemory = operator new(10*sizeof(EquipmentPiece));

                    //bestPieces指向此內存,使這塊內存被視為一個EquipmentPiece數組
                    EquipmentPiece *bestPieces = reinterpret_cast<EquipmentPiece*>(rawMemory);

                    //利用"placement new"構造這塊內存中的EquipmentPiece objects
                    int IDNumber = 0;
                    for(int i = 0; i < 10; i++)
            {
                        new (&bestPieces[i]) EquipmentPiece( IDNumber );
                    }

                注意:該方法維護比較困難。在數組內對象結束生命時,要以手動方式調用destructors,最后還得調用operator delete釋放raw memory
                    //
            bestPieces中對象以構造次序的反序析構掉
                    for(i = 0; i < 10; i++){
                        bestPieces[i].~EquipmentPiece();
                    }

                    //釋放raw memory
                    operator delete (rawMemory);

            posted on 2011-02-14 22:02 luis 閱讀(1485) 評論(0)  編輯 收藏 引用
            <2011年2月>
            303112345
            6789101112
            13141516171819
            20212223242526
            272812345
            6789101112

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            友情鏈接

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            国产精品久久久香蕉| 中文字幕亚洲综合久久2| 狠狠色丁香久久婷婷综合_中| 久久综合九色综合欧美就去吻| 精品国产婷婷久久久| 国内精品久久国产| 久久精品国产亚洲AV麻豆网站 | 久久综合给合久久国产免费| 日本久久久久亚洲中字幕| 久久精品国产亚洲AV高清热| 国产精品gz久久久| 久久久久久人妻无码| 国产成人综合久久久久久| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 精品人妻伦九区久久AAA片69| 精品久久久一二三区| 香蕉久久夜色精品国产小说| 国产精品久久久久久五月尺| 国产69精品久久久久9999| 中文字幕久久精品无码| 久久久久久A亚洲欧洲AV冫| 久久婷婷五月综合色奶水99啪| 国产精品成人久久久久久久| 亚洲va久久久噜噜噜久久| 欧美久久天天综合香蕉伊| 2021久久精品国产99国产精品| 一级女性全黄久久生活片免费| 亚洲国产成人久久精品动漫| WWW婷婷AV久久久影片| 精品久久久久久中文字幕大豆网| 精品国产乱码久久久久久浪潮| 色综合久久久久久久久五月| 亚洲婷婷国产精品电影人久久| 精品久久久久一区二区三区| 青青草原综合久久| 97久久精品无码一区二区天美| 久久精品亚洲AV久久久无码| 久久亚洲精品成人无码网站| 久久综合久久鬼色| 香蕉久久夜色精品国产尤物| 亚洲精品成人久久久|