程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 用3種方法在 operator= 中處理“自我賦值”,operator賦值

用3種方法在 operator= 中處理“自我賦值”,operator賦值

編輯:C++入門知識

用3種方法在 operator= 中處理“自我賦值”,operator賦值


假設你建立一個class 用來保存一個指針指向一塊動態分配的位圖。

1 class Bitmap {......};
2 class Widget{
3    ...
4    private:
5       Bitmap* pb ;
6 };
1 Widget&  Widget::operator= (const Widget& rhs)
2 {
3    delete pb;
4    pb = new Bitmap(*rhs.pb);
5    return *this;
6 }

上面是一份不安全的 operator= 實現版本,因為 operator= 函數內的*this 和 rhs 有可能是同一個對象。欲阻止這種錯誤有三種方法。

方法一:傳統的方法

1 Widget&  Widget::operator= (const Widget& rhs)
2  {
3    if( this == rhs ) return *this;
4     delete pb;
5     pb = new Bitmap(*rhs.pb);
6     return *this;
7  }

方法二:

1 Widget&  Widget::operator= (const Widget& rhs)
2  {
3      Bitmap* pOrig = pb ;
4    
5      pb = new Bitmap(*rhs.pb);
6      delete pOrig ;
7      return *this;
8  }

方法三:所謂的copy and swap 技術

1 Widget&  Widget::operator= (const Widget& rhs)
2  {
3       Widget temp( rhs ) ;
4       swap(temp);
5  
6       return *this;
7  }

C++中,在不使用protected情況下,派生類怎重載operator=號給基類賦值

class VintagePort : public Port
{
public:
VintagePort& operator=(const VintagePort& rhs)
{
if(this ! = &rhs)
{
nickname = rhs.nickname;
year = rhs.year;
Port::operator=(rhs);
}
return *this;
}

private:
char * nickname;
int year;
}
 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved