記一些幾年前寫c++經常會犯的一些錯誤,想到了其他的後面再加上
1、變數、函式命名不規範。
如果乙個變數命名隨意,比如表示乙個學生的年紀,如果這樣定義int a;相信乙個月後自己再看**,都不知道a表示什麼意思,
如果用int age; 來表示,就清晰很多了。
再說函式,如果需要乙個連線資料庫的函式,寫成connect();這是connect什麼呢。如果寫成connectdatabase()就很清晰了。
2、傳遞指標沒有判斷是否為空。傳遞物件、變數沒有判斷是否有效。
如果有乙個介面是 void insertitem(student *stu,int num); 其中student表示學生類。如果在該函式中直接使用stu->getage()。
這時候就無法保證程式的安全性,萬一指標為空的話,呼叫getage();就會導致程式崩潰。所以需要介面第一句就需要加判斷if(stu==nullptr) return; 來確保程式的安全。如果num使用前不判斷,比如說對num進行乙個除的操作。此時num為0,那程式也會down掉。需要加上類似if(num==0) num=1;來確保num被除數不為0。
但凡使用的是外部傳遞進來的引數,使用之前一定要判斷有效性,才能寫出健壯性的**。
3、new以後沒有記得釋放記憶體。
如果在乙個迴圈中,頻繁的new,又不釋放,會導致程式記憶體不斷增加,最終記憶體溢位,程式崩潰。曾經看過乙個程式,沒有操作放了10分鐘,記憶體增加了100多m。new了要記得detele,誰new的,誰去釋放,或者採取智慧型指標的方式來負責物件的銷毀。
4、delete指標後沒有記得把指標置為nullptr
如果delete ptr; 沒有加ptr=nullptr,後面有介面有如下的判斷 if(ptr!=nullptr) ptr->setnum();就會導致出現異常。
5、試圖返回區域性物件的指標和引用。
如果返回乙個區域性物件的引用,比如說 student& getinstance() 然後getinstance.getage();會導致輸出的值並不是10,而是乙個隨機值。因為區域性物件存在於棧中,函式一結束,就會被釋放,這時候用這個沒有記憶體的位址去呼叫介面,當然無法取得之前區域性物件設定的值。
指標如果在區域性new,並且返回出去使用,那麼誰去銷毀呢。讓使用介面的客戶去銷毀,是不合理的,因為如果使用者忘記銷毀,那麼就會造成記憶體洩漏。
6、開啟了檔案流,卻沒有進行關閉。
類似以下,file.open("log"); file.read(");但是直到函式結束,都沒有file.close()。這會導致再次開啟檔案時,發現檔案控制代碼被占用,導致開啟失敗。類似的還有tcp/udp的close()等等。凡是開啟的流操作,都要記得close()掉,避免不必要的錯誤產生。
7、使用了lock()後,在某些條件的return沒有unlock()。
這會導致死鎖現象的產生,切記,凡是lock()的地方,一定要在函式可能退出的地方進行unlock()。
寫面試程式需要注意
這麼乙個小不點的函式,他從三個方面考查 1 程式設計風格 2 出錯處理 3 演算法複雜度分析 用於提高效能 規則1 2 1 為了防止標頭檔案被重複引用,應當用ifndef define endif結構產生預處理塊。建議1 2 2 不提倡使用全域性變數,盡量不要在標頭檔案中出現象extern int ...
平時開發需要注意的點
一 牢記瀏覽器常見bug的處理方式,在 第一次編寫時就考慮解決相容問題 其實在第一次編寫 時,就已經可以開始考慮元素的樣式是否會引起其他瀏覽器的相容問題,防範於未然。舉個常見的例子 ie中float元素如果同時設定了margin值,此時margin的值會變為雙倍,解決辦法是在該元素中加入displa...
腸胃不好的人 平時要注意什麼
飲食調胃三要點 多數人可能認為自己的胃只有一點點小毛病,甚至是完全健康的,根本不用多考慮。實際上,現代人由於快節奏的生活以及強大的工作壓力,大部分人的胃都處於亞健康狀態。所以,也許您的胃並不像您認為的那樣健康呢!廣州軍區廣州總醫院消化科主任孫桂華提醒廣大市民在護理腸胃時邀特別注意以下3要點。要點一 ...