久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C++_指針懸掛和賦值操作符的重載

 just_person 2012-08-17

指針懸掛:

問題:使用new申請的內存內存空間無法訪問,,也無法釋放,。

原因:直接指向new申請的存儲空間的指針變量進行賦值修改

后果:失去了原來的地址,原來的空間無法訪問也無法釋放,,造成內存泄漏

            還可能造成同一個內存釋放兩次

容易引起指針懸掛的方式:對象的初始化和對象間賦值

容易引起指針懸掛的條件:類中含有指針類型的成員時,,使用默認的拷貝構造函數(shù)和賦值函數(shù)都會出現(xiàn)兩個指針變量互相賦值,產生指針懸掛的問題,。

解決方法:需要重新定義拷貝構造函數(shù)和超載賦值運算符

賦值操作符:    

 作用:兩個已經存在的對象間相互賦值,,產生兩個完全相同的內存拷貝

 舉例:string a("hello");//調用構造函數(shù)

             string b("would");//調用構造函數(shù)

             string c=a;//調用拷貝構造函數(shù)--風格差,應使用string c(a)

             c=b;  //調用拷貝賦值函數(shù)

重載賦值運算符:

語法:

  1. X& X::operator=(const X & fm)  
  2. {  
  3.     函數(shù)體  
  4. }  

注意:

          1,、第一個引用的作用(為什么使用返回函數(shù)引用):

                原因:為了實現(xiàn)對象間的連續(xù)賦值,。

               使用返回函數(shù)引用的好處:結果得到的是一個變量,它既可以當左值,,也可當右值,,且采用賦值時沒有引入臨時變量,直接從原結果拷貝,。

          2,、第二個引用的作用:防止調用拷貝構造函數(shù),,因為拷貝構造函數(shù)也可能引起指針懸掛

          3,、const的作用:當參數(shù)使用引用時,可能會改變傳入的參數(shù),,為了避免這樣,,就使用const

具體代碼:

  1. class Point  
  2. {  
  3. private:  
  4.     char * name;  
  5. public:  
  6.     Point(char * className)  
  7.     {  
  8.         name = new char[strlen(className)+1];  
  9.         strcpy(name, className);  
  10.     }  
  11.     Point(const Point& p)//深拷貝  
  12.     {  
  13.         name = new char[strlen(p.name)+1];  
  14.         strcpy(name,p.name);  
  15.     }  
  16.     ~Point()  
  17.     {  
  18.         cout<<name<<endl;  
  19.         delete []name;  
  20.     }  
  21.     Point& operator=(const Point&p);  
  22. };  
  23. 系統(tǒng)自帶的等號運算符:  
  24. Point& Point::operator=(const Point&p)  
  25. {  
  26.     name=p.name;//造成指針懸掛  
  27. }  
  28. 重載后的等號運算符:  
  29. Point& Point::operator=(const Point&p)  
  30. {        
  31.     delete[]name;//釋放原來的        
  32.     name=new char[strlen(p.name)+1];        
  33.     strcpy(name,p.name);          
  34.     return *this;      
  35. }  

拷貝構造函數(shù)和重載賦值運算符的代碼對比:

  1. Point::Point(const  Point& p)//拷貝構造函數(shù)  
  2. Point& Point::operator=(const Point&p)//重載賦值運算符  

注意:

         1、參數(shù)都是一樣的,,都有const和引用,,但是帶他們的原因不同,具體見上面,。

         2,、拷貝構造函數(shù)無返回值,而重載賦值運算符使用 返回函數(shù)引用,。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多