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

            類對(duì)象數(shù)組初始化

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

             

                以下列出幾種初始化的方法:
                <
            >、對(duì)象數(shù)組
                    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
               
            當(dāng)然,如果你將構(gòu)造函數(shù)參數(shù)全都設(shè)了默認(rèn)值,以上兩種寫(xiě)法也成功,如將類中構(gòu)造函數(shù)修改如下:
                    ...
                    EquipmentPiece(int IDNumber = 0) : IDNumber(IDNumber) {};
                    ...


                <
            >、指針數(shù)組
                    typedef EquipmentPiece* PEP;    //PEP
            是個(gè)指向EquipmentPiece的指針

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

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

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


                <
            >、使用placement new
                   
            方法是:先為此數(shù)組分配raw memory,然后使用"placement new"在這塊內(nèi)存上構(gòu)造EquipmentPiece objects;

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

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

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

                注意:該方法維護(hù)比較困難。在數(shù)組內(nèi)對(duì)象結(jié)束生命時(shí),要以手動(dòng)方式調(diào)用destructors,最后還得調(diào)用operator delete釋放raw memory。
                    //
            bestPieces中對(duì)象以構(gòu)造次序的反序析構(gòu)掉
                    for(i = 0; i < 10; i++){
                        bestPieces[i].~EquipmentPiece();
                    }

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

            posted on 2011-02-14 22:02 luis 閱讀(1484) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            <2011年4月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            友情鏈接

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            人妻精品久久无码专区精东影业| 欧美激情精品久久久久久| 欧美激情精品久久久久久| 久久久91精品国产一区二区三区| 婷婷综合久久中文字幕蜜桃三电影| 亚洲精品无码久久毛片| 久久精品成人| 伊人久久大香线蕉综合5g| 久久只这里是精品66| 久久久久久久波多野结衣高潮 | 久久91精品久久91综合| 久久99精品久久久久久动态图 | 99久久国产综合精品成人影院| 1000部精品久久久久久久久| 国产亚洲综合久久系列| 狠狠色丁香久久综合婷婷| 一本久久久久久久| 精品无码久久久久久久动漫| 欧美与黑人午夜性猛交久久久 | 久久夜色精品国产欧美乱| 久久99国产精品尤物| 亚洲综合久久综合激情久久| 久久99久久成人免费播放| 日韩人妻无码一区二区三区久久99| 无码人妻久久一区二区三区免费 | 久久综合久久鬼色| 亚洲国产精品无码成人片久久| 久久国产免费观看精品3| 999久久久免费国产精品播放| 亚洲国产成人久久综合野外 | 无码人妻久久一区二区三区免费| 久久国产精品一区二区| 久久天天婷婷五月俺也去| 成人久久精品一区二区三区| 久久免费视频6| 国产精品久久久久影院色| 亚洲欧美久久久久9999| 国内精品久久久久影院免费| 久久婷婷五月综合97色直播| 亚洲午夜久久影院| 久久久久人妻一区二区三区vr|