• <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>
            Impossible is nothing  
              愛過知情重醉過知酒濃   花開花謝終是空   緣份不停留像春風(fēng)來又走   女人如花花似夢
            公告
            日歷
            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789
            統(tǒng)計
            • 隨筆 - 8
            • 文章 - 91
            • 評論 - 16
            • 引用 - 0

            導(dǎo)航

            常用鏈接

            留言簿(4)

            隨筆分類(4)

            隨筆檔案(8)

            文章分類(77)

            文章檔案(91)

            相冊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

             

            1.CTypedPtrList<CObList, CDrawObj*> 與 std::vector<CDrawObj*>
            如果CDrawObj*從COject繼承用CTypedPtrList優(yōu)于用std::vector,雖然std::vector很優(yōu)美,但在
            MFC下,MFC類是大房,std::vector是小妾,很多MFC類的功能std::vector用不了,CTypedPtrList可以.
            比如直接的容器序列化,如果使用std::vector的話,你的工作將很多,保存時需遍歷對象,一個一個保存,讀取時你要知道對象的具體類型(繼承的最末端),然后創(chuàng)建對象,一個一個讀取.

            typedef CTypedPtrList<CObList, CMyObject*>  CMyList;
            CMyList ml;
            CMyObject* pMyObject = new CMyObject();
            ml.AddTail(pMyObject);

            CFileException e;
            CFile myFile;
            myFile.Open("MyFile.txt", CFile::modeCreate|CFile::modeWrite, &e);
            CArchive ar(&myFile, CArchive::store);
            ml.Serialize(ar);

            ar.Close();
            myFile.Close();

            while (!ml.IsEmpty())
            {
               delete ml.GetHead();
               ml.RemoveHead();
            }
            //=====================
            //where CMyObject is defined by the following files:

            //CMyObject.h
            class CMyObject : public CObject
            {
            public:
                 int i;
                 void Serialize(CArchive& ar);
                 CMyObject() { i = 9876;}
            protected:
                 DECLARE_SERIAL(CMyObject)
            };

            //===================
            //CMyObject.cpp
            #include "stdafx.h"
            #include "CMyObject.h"

            IMPLEMENT_SERIAL(CMyObject, CObject, 0) 

            void CMyObject::Serialize(CArchive& ar)
            {
                CObject::Serialize( ar );
                if( ar.IsStoring() )
                     ar << i;
                else
                     ar >> i;
            }
            2.析構(gòu)函數(shù)可以自己調(diào)用
            比較吃驚!
            但msdn上是這樣說的
            Calling a destructor explicitly is seldom necessary. However, it can be useful to perform cleanup of objects placed at absolute addresses. These objects are commonly allocated using a user-defined new operator that takes a placement argument. The delete operator cannot deallocate this memory because it is not allocated from the free store . A call to the destructor, however, can perform appropriate cleanup. To explicitly call the destructor for an object, s, of class String, use one of the following statements:
            s.String::~String();     // Nonvirtual call
            ps->String::~String();   // Nonvirtual call

            s.~String();       // Virtual call
            ps->~String();     // Virtual call

            自己測試的代碼
            #include <iostream>

            using namespace std;
            class ExplicitlyCallDesCtor
            {
            public:
             ExplicitlyCallDesCtor()
             {
              cout << "call Constructor" << endl;
             }
             ~ExplicitlyCallDesCtor()
             {
              cout << "call Destructor" << endl;
             }
            private:
             int member;

            };
            int main()
            {
             {
              ExplicitlyCallDesCtor  o;
              cout << "befor Explicitly call" << endl;
              o.~ExplicitlyCallDesCtor();
              cout << "after Explicitly call" << endl;
              cout << "Exit the scope" << endl;
             }
                cout << "Systemc all" << endl;
            }
            結(jié)果:
            call Constructor
            befor Explicitly call
            call Destructor
            after Explicitly call
            Exit the scope
            call Destructor
            Systemc all
            microsoft c++ compiler 13 與 GCC 3.4.2下結(jié)果相同

            3.注意一個不易發(fā)現(xiàn)的死循環(huán)
            std::vector<int> IntS;
            ints.pushback(...)
            for (UINT i=IntS.size()-1;i>=0;i--)
            {
            ....
            }


             

            posted on 2006-03-03 16:45 笑笑生 閱讀(1336) 評論(3)  編輯 收藏 引用
            評論:
            • # re: 工作中發(fā)現(xiàn)的  …… Posted @ 2006-03-03 16:54
              3.注意一個不易發(fā)現(xiàn)的死循環(huán)
              無語了……
              無符號數(shù)當(dāng)然不小于0了  回復(fù)  更多評論   

            • # re: 工作中發(fā)現(xiàn)的  蟲子 Posted @ 2006-03-03 16:57
              STL的序列化可以參看一下boost的序列化庫。
              如果你的工作都是在windows下的話,MFC是一個非常合適而且有效的庫平臺。
                回復(fù)  更多評論   

            • # re: 工作中發(fā)現(xiàn)的  Stone Jiang Posted @ 2006-04-13 09:17
              0也屬于無符號數(shù)呀   回復(fù)  更多評論   


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


             
            Copyright © 笑笑生 Powered by: 博客園 模板提供:滬江博客
            99久久精品免费看国产| 99久久国产热无码精品免费 | 国产精品欧美亚洲韩国日本久久 | 亚洲精品美女久久777777| 久久天堂AV综合合色蜜桃网 | 国产精品99久久久精品无码| 麻豆成人久久精品二区三区免费 | 伊人久久大香线蕉av不卡 | 日韩久久久久中文字幕人妻| 蜜臀av性久久久久蜜臀aⅴ| 亚洲成色999久久网站| 欧美亚洲国产精品久久| 欧美激情精品久久久久| 一本久久a久久精品亚洲| 久久精品国产清自在天天线| 久久精品水蜜桃av综合天堂| 一本色道久久综合狠狠躁篇| 久久精品无码一区二区三区| 久久狠狠爱亚洲综合影院| 久久久99精品成人片中文字幕| 亚洲国产精品无码久久98| 午夜精品久久久久久| 久久国产视频99电影| 久久九九全国免费| 99热成人精品热久久669| 亚洲AV无码一区东京热久久| 久久亚洲国产最新网站| 久久亚洲精精品中文字幕| 亚洲?V乱码久久精品蜜桃 | 97久久国产露脸精品国产| 日本久久中文字幕| 久久久久国产一区二区三区| 精品久久国产一区二区三区香蕉| 久久99精品国产自在现线小黄鸭| 亚洲中文字幕无码久久2017| 久久久国产99久久国产一| 亚洲精品无码久久毛片| 亚洲伊人久久综合中文成人网| 久久人搡人人玩人妻精品首页| 久久婷婷五月综合97色直播| 久久中文字幕无码专区|