C++ 賦值運算子函數

來源:互聯網
上載者:User

標籤:資料   operator   tor   this   釋放   amp   導致   ptr   html   

本文為博主原創文章,未經博主允許不得轉載 http://www.cnblogs.com/kiplove/p/6783497.html

C++的重載運算子,由關鍵字operator和運算子號共同組成,一般而言C++裡只要運算子不含"."都可以重載。

這裡主要講一下賦值運算子的重載。

一、一個重載賦值運算子的的例子

class Mystring{public://    Mystring()=default;    Mystring(string pData="null")    {        m_pData=new string;        *m_pData=pData;    }    Mystring(const Mystring &str)
  {
    m_pData=new string;
    *m_pData=pData;
  }
~Mystring(void){delete m_pData;}    Mystring& operator=(const Mystring &ptr)    {        if(this==&ptr)            return *this;        delete m_pData;        m_pData=NULL;        m_pData=new string;        *m_pData=*ptr.m_pData;        return *this;    }    string print(){return *m_pData;}private:    string *m_pData;};int main(){    string pData;    Mystring a("hello");    Mystring b,c;    b=c=a;//  (b=c)=a;    cout<<a.print()<<b.print()<<c.print()<<endl;    return 0;}

二、分析

1、傳回值類型

傳回型別一般聲明為類型的引用,並在函數結尾時返回執行個體自身的引用(即*this)。這裡主要有兩個原因:

a.返回引用可以減少一次拷貝構造和解構函式導致不必要的開銷,因為傳回值類型不是引用,會建立一個匿名對象,這個匿名對象時個右值,擷取return的值。

b.可以實現連續賦值

 在例子中

  b=c=a;

 傳回值不是參考型別也是可以的,其運算順序

  b=(c=a);

 c得到一個右值,再將右值賦給b,所以邏輯上沒有問題的。但是如果是

  (b=c)=a;

 這裡將會出錯,b=c後b是一個右值,所以b=a時將會出錯。

2、參數

參數聲明為const且是一個引用

a.const 是因為賦值運算,不希望修改原來類的狀態,同時可以接受const與非const的參數

b.引用則避免了拷貝建構函式

3、判斷是否是傳入執行個體與當前執行個體是同一個

如果相同,直接返回可以減少不必要的操作

4、賦值前,釋放自身的記憶體

三、考慮異常安全性

異常安全函數保證:

a.不泄露任何資源b.不允許資料破壞

對於第一點一般可以用資源管理類可以實現,採用智能指標,綜合兩點保證可以用通過copy-and-swap實現異常安全。

 Mystring& operator=(const Mystring &ptr) {        if(this!=&ptr)        {            Mystring temp(ptr);            string ptemp=*temp.m_pData;            *temp.m_pData=*m_pData;            *m_pData=ptemp;        }        return *this; }

 

 

 

C++ 賦值運算子函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.