論C C 引用的重要性

2021-06-23 07:58:06 字數 1830 閱讀 8939

踏入軟體行業已一年有餘,感覺自己很菜,一直想把日常遇到的問題,以一種和合適的方式記錄下來,以供自勉,偶然和同事聊天,發現部落格這玩樣,開始中毒,於是「開壇做法」,留待自己閒暇時光溫故知新。

今偶遇一問題,讓自己頓覺開朗,寫下心得(話說這個真心感覺到面試過程中別人問引用之類的問題,很是不理解啊,現在有所領悟)。

表象:class cgisadapter

;定義這樣乙個業務類,需要對地圖進行一系列處理,使用方式如下:

int model_pointsanalysis(calparams* pcalparams, scmtrx* pscmtrx, trxnuminfo strtrxnuminfoneed, cgisadapter gisadapter, cstring resultfilefullname);

uint showfstcalthread(lpvoid pparam)

{int nerrorcode = -1;

/*獲取地圖資訊*/

cgisadapter gisadapter;

gisadapter.loadmaps(cprojectfile::getprojfilename());

.......//一系列操作

nerrorcode = model_pointsanalysis(pcalparams,

pscmtrx, strtrxnuminfoneed, gisadapter, resultfilefullname)  ;

.......//一系列操作

return 0;

在退出showfstcalthread函式時,會呼叫cgisadapter類的析構函式,進行相應的記憶體釋放,這裡的表象是ingmapgeo* m_pdemmap; ingmapgeo* m_pdhmmap; ingmapgeo* m_pdsmmap; ingmapgeo* m_pdommap; ingmapgeo* m_ppopmap;在釋放這一系列指標時,程式會蹦;我的初始想法是記憶體重複釋放(當然也確實是重複釋放了) ;

現在來細細分析下:

當程式走到該行nerrorcode = model_pointsanalysis(pcalparams,

pscmtrx, strtrxnuminfoneed, gisadapter, resultfilefullname)  ;針對gisadapter這個類物件實際上只是做了乙個形參和實參之間的乙個淺拷貝;在model_pointsanalysis函式中進行處理的實際上是該物件的乙個拷貝物件,這個拷貝物件和原始物件中ingmapgeo* m_pdemmap; ingmapgeo* m_pdhmmap; ingmapgeo* m_pdsmmap; ingmapgeo* m_pdommap; ingmapgeo* m_ppopmap;這些指標指向的位址都是相同的,所以在函式model_pointsanalysis結束時釋放了一次(析構中釋放),在showfstcalthread函式結束時又再次釋放了一次(析構中釋放),自然引起程式的崩潰。

解決這種問題,我初始想法進行深拷貝,保證形參和實參中gisadapter物件中的指標不是指向同一位址,這樣就不存在重複釋放的現象;但回過頭一想為啥不用引用的呢,這樣兩個函式中處理的物件在記憶體中只有乙份,不但不需要進行淺拷貝的動作提高效率,還能保障不會對同一位址多次釋放;

int model_pointsanalysis(calparams* pcalparams, scmtrx* pscmtrx, trxnuminfo strtrxnuminfoneed, cgisadapter& gisadapter, cstring resultfilefullname);

這樣乙個簡單的符號,解決多行**和程式效率的問題,很是值得學習,這裡也漸漸明白引用的功效了。(大牛看到次肯定會「呵呵」,哎,希望從這些點點滴滴開始積累,做個基礎紮實的「程式猿」)

論安全的重要性

論安全的重要性 安全 是乙個永不過時的話題。在我們的現實生活中,無數的事實告訴我們,凡是無視安全的行為必將付出慘痛的代價。世界上每天都在發生著安全事故,汽車超載,超速行駛,闖紅燈 生產單位偷工減料,違規操作 公共服務場所無視安全規範 種種無視安全的情況造成了一起又一起的安全事故。慘痛的教訓告訴我們任...

論溝通的重要性

溝通,是建立人際關係的橋梁,如果這個世界缺少了溝通,那將是乙個不可想象的世界。可以這樣說,沒有溝通就沒有人際的互動關係,人與人之間關係,就會處在僵硬 隔閡 冷漠的狀態,會出現誤解 扭曲的局面,給工作和生活帶來極大的害處。資訊時代的到來,工作 生活節奏越來越快,人與人之間的思想需要加強交流 社會分工越...

論特徵的重要性

特徵工程有多重要,可以引用一句話來表達 資料和特徵決定了模型的上限,演算法只是在幫忙逼近這個上限。好的特徵是決定乙個模型準確率的關鍵,那問題來了?什麼是特徵呢,特徵就是資料對於結果的一種描述。比如我們形容乙個人是否漂亮,那她的眼睛大小 鼻子的形狀 臉型都是特徵。通常,當獲得乙份結構化資料的時候,如果...