青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

向往的程序人生

C,C++,設計模式,3D圖形學,游戲開發
posts - 4, comments - 13, trackbacks - 0, articles - 0

C++編程中的一些感悟

Posted on 2009-04-23 15:44 向往 閱讀(1124) 評論(4)  編輯 收藏 引用 所屬分類: C/C++/Script
接觸C++已經有五個年頭了,多多少少在學習和工作的過程中有些感悟,遂一一記錄,勉己勉人.
有少許字段是摘抄自網上的文章,但存檔時只是隨手黏貼,丟失了作者信息,無法列出,對此表示歉意,并感謝發揚分享精神的原作者.
此外,若以后有新的感悟將在此添加.有不當之處,懇請指正.
  1. 指針賦值時,要謹防指針的同值性.如:
     1 void SharePtr::operator = (Ptr *ptr)
     2 {
     3     if(mPtr != ptr)        // 防止指針同值.其中mPtr是SharePtr類中用來保存指針的變 量.
     4     {
     5         if(mPtr != NULL)
     6         {
     7             delete mPtr;   // 如果不是同值, 刪除之前的指針.
     8             mPtr = ptr;
     9         }
    10     }
    11 

  2. 不要忽視編譯警告,有些警告是出現bug并導致程序crash的征兆。比如類型轉化警告、數據未初始化警告都可能導致程序出錯。為了以后減少調試和避免錯誤的幾率,請重視編譯器的警告信息。
  3. 當工程需要給Class加導出前綴(如:__declspec(dllexport))卻有些沒有加時,其他工程引用它將會出現 Unrezosle Symbol的錯誤.
  4. 若某個類需要作為父類,其析構函數必須聲明為virtual,否正子類的析構函數無法調用,導致內存泄漏.
  5. 新增一個Class時,先定好接口,然后再編碼.這樣可以不用經常改動,減少編譯時間. 
  6. 要謹防數值越界.對于有些存儲范圍小的變量,必須先進行越界處理,然后再賦值.如:
    // 未添加數據越界檢測代碼
    int num = -1;
    unsigned 
    char ch = num; // ch的值不是-1,而是255.因為num超出了unsigned char表示的范 圍.

    // 添加了數據越界檢測代碼
    int num = -1;
    assert(num 
    >=0 && num <= std::limit<unsinged char>::max());  // 若越界則彈出斷言
    unsigned char ch = num;
  7. 在宏里邊盡量不定義變量,否則在外部調用兩次時,有可能出現變量重復定義的錯誤.
    如果確實要定義變量,可以改寫成函數.
  8. 不要為模式而模式.使用設計模式只是為了更好地復用和擴展,如果得到反作用,寧愿不用.
  9. 有些子類應當覆蓋抽象類vitual成員時,千萬不能誤寫為重載.否則很難查出錯誤.
  10. 若有兩個人做同一個模塊時,需要商量好整體架構,明確分工,不可隨意修改他人的代碼,若要修改也應告訴原作者.若對某些分工意見有分歧時,應慢慢磨合,耐心心細比較,確定可行方案,切不可逃避,將問題延續下去. 
  11. 定義接口時,盡量為使用者(用戶)提供明朗,統一,清晰的接口:
    1) 盡可能使用默認參數;
    2) 使用管理器管理物體的創建刪除;
    3) 使用抽象類抽象出若干類似Object的接口;
    4) 函數名盡量使用動詞或動賓結構,并體現出職責;
    5) 在實現相同功能的情況下,對外提供的函數應盡可能少;
    6) 能聲明成private或protected的數據成員和成員函數就不要聲明為public. 
  12. 每個對象應當完成并且只完成它該做的事,只管它該管的事,簡而言之,就是對象內部,對象之間應該保持"高內聚,低耦合".
  13. 寫一個循環時,如果該循環體比較大,則應該先寫好循環判斷條件,再實現細節.
    while(i > 0)
    {
        
    --i;
    }
    //實現如上代碼后,再寫實現細節(循環體).這樣做的目的是可以避免在實現細節后忘記增加--i等這類循環因子更新語句.
    如:while(i > 0)
    {
        循環 體;
        
    --i;
    }
  14. 代碼中的注釋應當致力于解釋為什么,而不是怎么做。好的注釋并不是重復代碼中顯而易見的事實,而是引起對代碼中微妙的弱點的重 視。明白的代碼常常是被注釋所玷污了,不過對于作者顯而易見的東西對于讀者來說常常是晦澀的。一整段的注釋要比逐行解釋好的多。
  15. 類的組織Class organization
    1).按照以下順序組織類的定義,按照用戶最為關心的順序組織類的代碼:
    Public type forward-declarations & typedefs  
    Public constructors & destructor  
    Public member functions
    -----------------------------------------------------------
    Protected type forward-declarations & typedefs  
    Protected member functions  
    -----------------------------------------------------------
    Private type forward-declarations  
    Private member functions  
    Private data members  
    2).盡量不要在類的定義體中進行函數定義。模板及內聯函數除外。
    3).復用public private protected關鍵字,將不同類型的成員分開,如成員函數和數據成員。
    4).在繼承類里就不要重復寫virtual關鍵字,可以 將它們的聲明組織成一組。
  16. 在使用new/delete, malloc/free時,注意"誰創建誰銷毀"的原則.除非有明確的規約,否則很容易造成內存管理混亂,導致出現內存錯誤.
  17. 頭文件包含其實是一想很煩瑣的工作,不但我們看著累,編譯器編譯的時候也很累,再加上頭文件中常常出現的宏定義。感覺各種宏定 義的展開是非常耗時間的,遠不如自定義函數來得速度。我僅就不同頭文件、源文件間的句則結構問題提出兩點原則,僅供參考:
    第一個原則 應該是,如果可以不包含頭文件,那就不要包含了。這時候前置聲明可以解決問題。如果使用的僅僅是一個類的指針,沒有使用這個類的具體對象(非指針),也沒 有訪問到類的具體成員,那么前置聲明就可以了。因為指針這一數據類型的大小是特定的,編譯器可以獲知。
    第二個原則應該是,盡量在 CPP文件中包含頭文件,而非在頭文件中。假設類A的一個成員是是一個指向類B的指針,在類A的頭文件中使用了類B的前置聲明并便宜成功,那么在A的實現 中我們需要訪問B的具體成員,因此需要包含頭文件,那么我們應該在類A的實現部分(CPP文件)包含類B的頭文件而非聲明部分(H文件)。
  18. 解決頭文件相互包含問題的方法之一:在.h文件里用class A聲明,數據成員用指針或者引用,在.cpp里用#include"A.h"即可.
  19. 在索引列表時,最好能根據索引和名字來獲取元素,以滿足不同場合的需求.在編輯器制作中更彰顯其意義.
  20. 在類A的構造函數里如果有類B成員變量b,并調用了b的某個函數如b.fun(),則b.fun()里邊不能調用A的指針.因 為此時A的指針尚未完成空間分配,強行調用將導致出錯.
    這種情況在Debug下偶爾出錯,但在Release版下一定出錯.應當引起 重視!
  21. 以二進制存儲信息時,要注意int等類型在不同的平臺不同CPU架構下長度是不一樣的,故在寫入文件時,建議先用宏 (如#define INT_LENGTH 4)來表示寫進文件的長度.此外,還要注意字節序(高位在前還是低位在前)的問題.
    所以一般情況下,用文本文件來存儲相關信息,避免 了那些問題.
  22. 由于std::vector里邊的內存管理機制會適時釋放內存以調整合適的大小,故在外部不要保存std::vector里的 元素地址.如果確實要保存,則每次增刪vector元素時必須更新外部的指針,否則將可能造成垃圾指針而出現內存錯誤(有時候甚至不報錯,程序運行出現不 可預料的結果.很詭異,很難發現bug).
  23. 永遠不要在類的構造或者析構過程中調用虛函數,因為這樣的調用永遠不會沿類繼承樹往下傳遞到子類中去。否則很有可能出現很隱晦 的bug.參見:http://www.enet.com.cn/article/2005/0706/A20050706431501_2.shtml
  24. 給有虛函數的模板類添加父類.即將公用接口抽象在父類里,就可以統一處理模板類了.

Feedback

# re: C++編程中的一些感悟  回復  更多評論   

2009-04-23 18:22 by Sunshine Alike
好文!學習了~~

# re: C++編程中的一些感悟  回復  更多評論   

2009-04-24 01:31 by sisco
感覺像大雜燴,不過有些條目精辟入里.謝謝!

# re: C++編程中的一些感悟  回復  更多評論   

2009-04-24 11:28 by 向往
@Sunshine Alike
@sisco
如果本文對大家有所幫助,是我寫文章的初衷和動力.謝謝賞閱.

# re: C++編程中的一些感悟  回復  更多評論   

2009-08-21 22:43 by 李現民
第六條,比較好
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            午夜伦欧美伦电影理论片| 欧美日韩在线免费观看| 免费精品99久久国产综合精品| 亚洲在线一区二区| 亚洲一区二区在线免费观看视频| 亚洲网站视频| 午夜国产一区| 久久麻豆一区二区| 亚洲成色www久久网站| 欧美一区二区三区视频在线观看| 欧美一级午夜免费电影| 久久久久一区二区三区| 亚洲福利免费| 亚洲在线成人| 老司机一区二区三区| 欧美日韩国产一区精品一区| 国产精品国产三级国产aⅴ浪潮| 国产精品一区二区三区四区五区| 亚洲欧美成人精品| 久久九九国产精品怡红院| 久久精品国产久精国产爱| 久久久久久久一区| 亚洲韩国精品一区| 亚洲视屏在线播放| 老司机亚洲精品| 国产精品女主播| 亚洲人成人一区二区三区| 国产精品99久久久久久人| 久久人人超碰| 中日韩高清电影网| 免费在线欧美黄色| 国产婷婷成人久久av免费高清 | 欧美精彩视频一区二区三区| 欧美性大战久久久久久久| 在线观看欧美精品| 欧美一级专区| 一本色道久久综合精品竹菊| 免费黄网站欧美| 黄网站免费久久| 久久精品盗摄| 亚洲自拍偷拍色片视频| 欧美日韩不卡视频| 亚洲欧洲中文日韩久久av乱码| 欧美人交a欧美精品| 国产美女一区二区| 亚洲少妇最新在线视频| 亚洲福利一区| 久久深夜福利免费观看| 国产日韩欧美精品综合| 亚洲综合色婷婷| 一本色道久久综合亚洲精品按摩| 免费观看久久久4p| 亚洲大胆av| 欧美成人一区二区三区在线观看 | 国产女主播在线一区二区| 日韩一级黄色片| 亚洲激情电影中文字幕| 能在线观看的日韩av| 亚洲国产精品一区二区第一页| 久久夜色精品| 久久精品卡一| 国产精品wwwwww| 亚洲一区三区在线观看| 91久久精品国产91久久| 欧美成人午夜免费视在线看片| 亚洲国产精品成人| 欧美激情第9页| 欧美激情视频在线免费观看 欧美视频免费一 | 99热在线精品观看| 欧美日韩国产一区二区三区| 中文精品视频一区二区在线观看| 亚洲欧洲久久| 欧美视频中文字幕在线| 午夜精品久久久久久久99热浪潮| 亚洲一区视频在线| 国产一区av在线| 欧美国产成人精品| 欧美日韩午夜精品| 欧美一区二区视频在线观看2020 | 久久av免费一区| 亚洲国产精品久久久久秋霞影院| 亚洲国产91| 国产精品久久久久久久久久三级 | 久久综合色8888| 欧美1区视频| 亚洲一区二区三区涩| 香蕉成人久久| 亚洲日本精品国产第一区| a91a精品视频在线观看| 国产婷婷色一区二区三区| 亚洲福利视频网站| 国产美女一区二区| 亚洲国产专区| 国产日韩欧美一区| 亚洲人成人一区二区在线观看| 国产精品视频成人| 欧美好吊妞视频| 国产乱码精品一区二区三区忘忧草 | 国产日韩综合| 亚洲国产你懂的| 国产欧美日韩在线观看| 亚洲电影视频在线| 国产一区二区三区视频在线观看| 91久久极品少妇xxxxⅹ软件| 国模私拍视频一区| 在线综合视频| 亚洲精品一区二区三区不| 欧美诱惑福利视频| 亚洲欧美日韩视频二区| 欧美国产精品中文字幕| 久久久99爱| 国产精品高潮在线| 欧美激情一区二区三区高清视频 | 亚洲在线免费观看| 免费在线日韩av| 免费亚洲电影在线| 国产精品美女一区二区在线观看| 国产一区二区三区四区| 91久久国产精品91久久性色| 黄色小说综合网站| 亚洲欧美精品suv| 亚洲国产成人精品久久久国产成人一区 | 久久婷婷国产综合尤物精品 | 亚洲二区在线视频| 一区二区三区自拍| 亚洲欧美卡通另类91av| 亚洲视频在线观看| 欧美紧缚bdsm在线视频| 欧美国产乱视频| 在线成人免费视频| 久久国产精品毛片| 久久国产欧美精品| 国产一区二区精品久久91| 亚洲综合视频网| 性做久久久久久久免费看| 国产精品国产三级国产普通话三级 | 亚洲国产精品久久久久秋霞蜜臀| 久久久国产精品一区二区中文| 久久国产日韩| 激情久久婷婷| 蜜桃av噜噜一区二区三区| 美女脱光内衣内裤视频久久网站| 国产一区久久| 免费短视频成人日韩| 亚洲丶国产丶欧美一区二区三区| 亚洲福利久久| 欧美精品色综合| 一本久久综合亚洲鲁鲁| 亚洲综合欧美日韩| 国产九色精品成人porny| 久久xxxx| 亚洲高清自拍| 亚洲欧美综合| 好吊色欧美一区二区三区四区| 久久精品一级爱片| 亚洲娇小video精品| 亚洲网站在线观看| 国产视频久久网| 麻豆精品精品国产自在97香蕉| 亚洲人成在线播放网站岛国| 亚洲欧美国产va在线影院| 国产午夜精品视频| 欧美 日韩 国产一区二区在线视频 | 亚洲欧美日韩区| 久久婷婷国产综合国色天香| 亚洲电影在线播放| 欧美日韩另类一区| 亚洲女ⅴideoshd黑人| 葵司免费一区二区三区四区五区| 亚洲精品九九| 国产日韩在线一区| 欧美黄色日本| 午夜一区二区三区不卡视频| 欧美**字幕| 亚洲永久在线| 日韩视频在线永久播放| 国产精品亚洲人在线观看| 久久久www成人免费无遮挡大片 | 亚洲精品一区二区在线| 国产精品av久久久久久麻豆网| 久久精品国产99精品国产亚洲性色| 亚洲激情电影在线| 猛男gaygay欧美视频| 午夜欧美大尺度福利影院在线看 | 日韩视频在线你懂得| 久久精品国产久精国产一老狼 | 欧美高清影院| 欧美专区福利在线| 亚洲视频免费观看| 欧美黄色片免费观看| 久久精品国产69国产精品亚洲| 一区二区三区在线免费观看| 欧美日韩视频| 欧美大片免费久久精品三p | 国产精品制服诱惑| 欧美美女bbbb| 蜜臀av一级做a爰片久久| 亚洲欧美另类中文字幕| 99re66热这里只有精品3直播| 久久综合999|