亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

內存陷阱 馴服C++中的野指針

2019-11-17 05:17:02
字體:
來源:轉載
供稿:網友

  什么是野指針?

  一個母親有兩個小孩(兩個指針),一個在廚房,一個在臥室,(屬于不同的代碼塊,其生存期不同)母親讓在廚房的小孩帶一塊蛋糕(指針指向的對象)給在臥室的小孩,這樣在臥室的孩子才肯寫作業。但這個在廚房的小孩比較調皮,他在走出廚房時自己將蛋糕吃了,沒能帶出來。而在臥室的沒有吃到蛋糕,所以不肯完成他的作業。結果母親卻不知道臥室的孩子沒有吃到蛋糕,還以為作業完了。結果第二天她就被老師召喚到辦公室了。事情麻煩了。

  這樣,那個在臥室的孩子就是野指針了,因為他沒有得到應得的蛋糕,不能完成母親交給他的作業。

  這就是c中所講的野指針。上面的小劇本不過演示了一種最基本的野指針的形成過程。更輕易出現的情形是coder在編碼時,大意之下使用了已經free過的指針。

  對于年輕點的經驗欠缺的coder來說是比較輕易犯的錯誤,經驗老到的程序員或者慎重采取成對編程的形式避免這種失誤,或者使用引用計數器防止形成野指針。

  總之,在c中,野指針也許性子野,但是控制起來也是有章可循。然而事情在c++中出現了變化。

  coder們面臨更大的麻煩了。c++程序員無可避免的要寫很多這樣那樣的類。誰讓c++是面向對象的呢?

  我們在寫類的時候難免要用new給類的數據成員分配內存。這本來沒什么,動態分配內存是一種很常見的基本操作,我們在學數據結構時經常這么做,不是么?

  但是伙計,事情并非這么簡單。類是一種高級的用戶自定義數據類型,看起來和結構、枚舉這樣的用戶自定義類型沒啥太大差別。假如你這樣認為....?那你會死的很慘。類太復雜了,普通情況下使用類的對象并沒有太大的問題,但是,當你要復制一個對象時,問題就來了。

  比如我們知道,你要用一個對象初始化另一個對象時,c++是按位進行拷貝的,即在目標對象里創建了初始化對象的一個完全相同的拷貝。這在多數情況下已經足夠了。但是,當你的類在創建時為每個對象分配內存,也就是說類中有new操作。當你的對象創建好后,類也為對象分配了一塊內存。假如你用這個對象去初始化另一個對象時,被初始化的對象和初始化的對象完全一樣。這意味著,他們使用同一塊內存,而不是重新為被初始化的對象分配內存。

  這樣麻煩就大了。假如一個對象銷毀了,那么分配的內存也就銷毀了(別忘了,類是有析構函數的,它負責在對象銷毀時,釋放動態分配的內存。難道你說你不在類中寫上析構部分?那么可憐的孩子,那你就走向了另一個深淵,當你的程序運行數小時之后,系統會告訴你,內存不夠用了。想象一下把你的程序用在騰訊的服務器上),另一個對象就殘缺不全了,這就像一對連體嬰兒,他們共用了一部分器官,心臟或者肝臟。要救活一個,就犧牲了另一個。一個得病了,另一個也要遭殃。

  可以說,這就是c++中更加變態的野指針。

  什么?你說我不用對象初始化對象?那么我們會不會將一個對象作為變元傳遞給函數呢?我們很多時候都這樣做。有時我們不得不將對象按值傳遞給一個函數,但是你要知道,按值傳遞是什么意思?它的意思就是,把實參的一個拷貝傳遞給函數。這和剛才的初始化沒什么兩樣,按位拷貝,函數體內的對象與外面的對象共用一塊內存,即便在函數中的對象沒有對這塊內存進行過操作,但是當函數結束時。。。。析構函數將會被調用......

  還有一種與之相反的情況......, 當你想要把一個在函數內的對象值返回給外面的對象時,這時候,會自動產生一個臨時對象,由它容納函數的返回值,并在函數結束時把結果傳給目標。那么這個臨時對象迅速的被創建,并被迅速的釋放。。。一塊內存被釋放了兩次。其后果是不可預見的。

  當你把一個對象的值賦給另一個對象時,假如你沒有重載賦值運算符,那么也會導致按位拷貝。最終產生一個野指針(一個隱藏在類內的毒瘤),或者釋放同一塊內存多次。

  看到了么?害怕了么?是不是感到C++到處都是陷阱呢?不但有陷阱,到處都是危險品。所有c中的疑難問題,到了c++就成了一般問題了。好了不廢話了,我們繼續講講解決之道。

  對于最后的這種賦值的情況,我們只有通過重載賦值運算符才能解決,也就是避免按位拷貝。

  至于前面的都屬于初始化,概括下來就是三種情況:

  1.當一個對象初始化另一個對象時,例如在聲明中;

  2.把所創建的對象拷貝(按值)傳遞給一個函數時;

  3.生成臨時對象時,最常見的就是函數的返回值。

  解決初始化時的按位拷貝問題,我們通過創建拷貝構造函數來解決。

  基本的拷貝構造函數形式為:

classname (const classname &o)
{
//body here
}

  拷貝構造函數就是針對這個問題而設計的。

  恩,大家都明白了吧?不要讓你的對象都變成可憐的連體人啊~~~~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品少妇一区二区30p| 久久精品视频播放| 久久手机免费视频| 亚洲最大av网| 国产精品高清在线观看| 精品视频中文字幕| 亚洲国产精品网站| 日韩欧美中文第一页| 欧美怡红院视频一区二区三区| 欧美一级高清免费| 日韩免费在线播放| 美女久久久久久久久久久| 国产精品99一区| 久久精品国产96久久久香蕉| 日韩在线观看高清| 热久久视久久精品18亚洲精品| 91日韩在线播放| 国产美女久久精品香蕉69| 亚州欧美日韩中文视频| 国产成人91久久精品| 91久久精品视频| 欧美精品激情blacked18| 成人做爰www免费看视频网站| 国外成人在线播放| 一区二区欧美亚洲| 精品日韩美女的视频高清| 亚洲老司机av| 日韩中文字幕在线精品| 91av网站在线播放| 国产精品视频内| 精品久久久久久亚洲国产300| 日韩精品有码在线观看| 中文日韩电影网站| 在线视频欧美性高潮| 欧美激情免费视频| 91精品久久久久久久久久入口| 久久精品99国产精品酒店日本| 国产一区二区丝袜高跟鞋图片| 欧美激情在线观看| 亚洲丁香久久久| 91美女片黄在线观| 成人免费视频a| 成人午夜一级二级三级| 亚洲精品国产精品国产自| 欧美日韩综合视频网址| 91系列在线播放| 中文字幕精品视频| 亚洲免费一级电影| 亚洲最大福利视频网站| 亚洲欧美国产精品va在线观看| 国产精品久久久久国产a级| 亚洲乱码av中文一区二区| 国产主播欧美精品| 91亚洲午夜在线| 欧美日韩一区二区免费视频| 中文字幕日韩高清| 成人看片人aa| 黄色一区二区在线| 色樱桃影院亚洲精品影院| 亚洲视频国产视频| 日韩视频免费看| 欧美电影在线观看高清| 97婷婷涩涩精品一区| 97人人模人人爽人人喊中文字| 亚洲国产成人精品久久久国产成人一区| 亚洲精品videossex少妇| 亚洲天堂日韩电影| 91沈先生作品| 国产午夜精品免费一区二区三区| 国产在线视频2019最新视频| 亚洲第一视频网| 国产日韩视频在线观看| 欧美大尺度激情区在线播放| 国产精品99久久久久久白浆小说| 欧美极品美女电影一区| 最新亚洲国产精品| 91精品国产综合久久香蕉922| 成人免费观看49www在线观看| 91po在线观看91精品国产性色| 97在线视频一区| 亚洲免费一在线| 91精品在线观看视频| 91久久久在线| 伊人一区二区三区久久精品| 中文字幕日韩免费视频| 欧美一区二区色| 夜夜狂射影院欧美极品| 国产精品18久久久久久麻辣| 麻豆一区二区在线观看| 国产日韩欧美在线| 午夜精品三级视频福利| 5278欧美一区二区三区| 欧美成人亚洲成人日韩成人| 97在线观看视频国产| 久久亚洲私人国产精品va| 欧美日韩在线另类| 精品久久久久久中文字幕| 亚洲国产精品悠悠久久琪琪| 色在人av网站天堂精品| 日韩欧美999| 日本久久久久亚洲中字幕| 久久久久久香蕉网| 国产精品久久久久久久电影| 亚洲v日韩v综合v精品v| 17婷婷久久www| 国产精品夜色7777狼人| 成人欧美一区二区三区在线| 日本精品在线视频| 91国产美女视频| 色偷偷偷综合中文字幕;dd| 亚洲毛片在线看| 欧美一级在线亚洲天堂| 亚洲理论电影网| 国产精品久久77777| 亚洲成人aaa| 国产精品999999| 色综合天天综合网国产成人网| 国产精品视频免费在线观看| 亚洲免费高清视频| 久久躁日日躁aaaaxxxx| 亚洲精品电影久久久| 欧美日本啪啪无遮挡网站| 亚洲影院色无极综合| 亚洲aⅴ男人的天堂在线观看| 久久精品一区中文字幕| 中文字幕不卡av| 精品福利樱桃av导航| 久久综合88中文色鬼| 日韩在线观看你懂的| 91欧美视频网站| 在线电影av不卡网址| 国产一区二区三区高清在线观看| 国产成人精品a视频一区www| 日韩一区二区三区xxxx| 日韩视频―中文字幕| 成人写真福利网| 3344国产精品免费看| 中文字幕国产亚洲| 欧美日韩国产色视频| 成人久久精品视频| 欧美日韩高清在线观看| 91精品综合久久久久久五月天| 一区二区三区在线播放欧美| 欧美日韩中文在线| 国产精品旅馆在线| 久久久av网站| 久久久久国产精品免费| 国产日韩欧美夫妻视频在线观看| 最好看的2019的中文字幕视频| 日韩精品免费电影| 亚洲精品国产精品国自产在线| 欧美另类老女人| 欧美成人午夜视频| 国产一区二区三区免费视频| 成人亚洲综合色就1024| 欧美贵妇videos办公室| 亚洲第一页自拍| 色综合久久悠悠| 成人免费直播live| 主播福利视频一区| 日本午夜人人精品| 91精品国产综合久久久久久久久| 国产精品a久久久久久| 有码中文亚洲精品|