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

            focus on linux, c/c++, lua

            對象池中的對象有容器成員變量,會如何?歡迎討論

            在我的代碼中,一直用對象池管理部分對象的分配。我是對哪些對象才使用對象池呢?我只有一個原則就是:
            當(dāng)某種對象會被頻繁的new和delete的時候,我會對這個對象使用對象池。

            前兩天,我在我的代碼中發(fā)現(xiàn)了有這樣一個類:

            class CPlayer : public IPlayer
            {
            public:
                CPlayer();    
                
            virtual ~CPlayer();
                
            virtual void Release();
                
            virtual IServerSession* GetLoginSvr();
                
            virtual GAMESVRVEC& GetGameSvrVec();
                
            virtual INTVEC& GetFriendVec();
                
            virtual INTVEC& GetBeFriendVec();
                
            virtual st_info* GetUserInfo();
                
            virtual IContainer* GetBag();
                
            virtual IContainer* GetStorage();
                
            virtual IContainer* GetHotKey();
                
            virtual void SetBag(IContainer* pContainer);
                
            virtual void SetStorage(IContainer* pContainer);
                
            virtual void SetHotKey(IContainer* pHotKey);
                
            void SetLoginSvr(CUserSession* pSession);    
                
            void SetRelationSet(char cSet);
                
            void SetUserInfo(const st_userinfo& stInfo);
            private:
                CUserSession
            * m_pLoginSvr;
                GAMESVRVEC m_vecGameSvr;
                INTVEC m_vecFriend;
                INTVEC m_vecBeFriend;    
                
            char m_cRelationSet;
                st_info m_stUserInfo;
                IContainer
            * m_pBag;
                IContainer
            * m_pStorage;
                IContainer
            * m_pHotKey;
            }
            ;

            由于這個玩家類,在玩家上下線的時候要頻繁的分配和釋放,于是我就創(chuàng)建了一個這個玩家的對象池。但是我發(fā)現(xiàn)這個類中含有大量的容器和指針,我頓時覺得這個對象池除了能省去頻繁的new和delete好處之外,對內(nèi)存管理幾乎沒有。因為容器或是指針還要去管理自己的內(nèi)存,在網(wǎng)上有個同學(xué)和說,當(dāng)結(jié)構(gòu)中有容器成員變量時是不能用對象池的,因為對象池要求大小尺寸固定,但容器的尺寸不固定。我覺得他這種說法是不正確的,其實sizeof(容器)也是一個固定的值,只是容器另外還要管理自己的空間而已。那么遇到這種情況,這種對象池是否有必要,如果不用,我一樣還要去new和delete。有的同學(xué)說,你這種設(shè)計就是錯誤的,應(yīng)該把容器和其他的定長變量分開管理,只對定長變量做對象池管理,可是在代碼的設(shè)計中,僅僅是為了這個池,把代碼拆的凌亂不堪,我還不如不用。同學(xué)們,告訴我的你想法是什么?謝謝

            再更新一次,還有很多大牛的聲音沒有聽到!

            posted on 2010-05-20 14:21 zuhd 閱讀(1539) 評論(3)  編輯 收藏 引用 所屬分類: c/c++

            評論

            # re: 對象池中的對象有容器成員變量,會如何?歡迎討論 2010-05-20 14:55 zuhd

            @空明流轉(zhuǎn)
            哪句話?這么激動?  回復(fù)  更多評論   

            # re: 對象池中的對象有容器成員變量,會如何?歡迎討論 2010-05-20 15:29 Kevin Lynx

            我覺得完全可以忽略子對象(成員變量對象)的細節(jié),也就是說假設(shè)這里的內(nèi)存池只管理player,那么你就沒必要去理會這些容器底層的細節(jié)。因為這會成為一個遞歸的情況。
            如果僅僅是為了緩存player本身,最好還是在將player放回池中的時候,來次reset吧。不然下一次再取出來的時候,會得到一個并非處于initial狀態(tài)的對象,這會增加邏輯的負擔(dān)。  回復(fù)  更多評論   

            # re: 對象池中的對象有容器成員變量,會如何?歡迎討論 2010-05-20 16:02 zuhd

            @Kevin Lynx
            池中的對象都類似與有一個Release的函數(shù),去做釋放具體對象中的資源,比如,對象中的IContainer*。其他的變量的初始化,也可以不在這里做,畢竟從池中取出來的時候,還要初始化一遍的!
              回復(fù)  更多評論   

            久久久久亚洲AV综合波多野结衣 | av午夜福利一片免费看久久| 18岁日韩内射颜射午夜久久成人| 日本WV一本一道久久香蕉| 东方aⅴ免费观看久久av| 久久精品国产99国产电影网| 久久综合五月丁香久久激情| 久久国产精品77777| 久久久青草青青国产亚洲免观| 亚洲欧美成人综合久久久| 大蕉久久伊人中文字幕| 久久丫精品国产亚洲av不卡| 久久精品国产只有精品66| 精品久久久久久无码专区| 亚洲欧美日韩精品久久亚洲区 | 久久狠狠爱亚洲综合影院| 99久久综合狠狠综合久久止| 亚州日韩精品专区久久久| 久久精品国产免费一区| 亚洲午夜久久久久妓女影院| 久久精品成人免费观看97| 国产一区二区三区久久精品| 波多野结衣久久一区二区| 久久久久人妻一区精品| 77777亚洲午夜久久多喷| 亚洲精品无码久久久| 久久久久久久久久免免费精品| 精品久久久久久久无码| 国产香蕉久久精品综合网| 香蕉久久久久久狠狠色| 久久精品国产精品亜洲毛片| 久久精品人人做人人妻人人玩| 狠狠色综合网站久久久久久久高清 | 亚洲精品国精品久久99热| 狠狠精品干练久久久无码中文字幕 | 精品国产青草久久久久福利| 久久综合久久性久99毛片| 久久久久亚洲AV无码专区网站| 91久久九九无码成人网站| 国产91色综合久久免费| 91精品久久久久久无码|