久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

Hi,歡迎來到嵌入式培訓高端品牌 - 華清遠見教育科技集團<北京總部官網>,專注嵌入式工程師培養15年!
當前位置: > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > 賦值函數剖析
賦值函數剖析
時間:2017-01-04作者:華清遠見

構(gou)造函(han)(han)(han)數(shu),拷貝構(gou)造函(han)(han)(han)數(shu),賦值函(han)(han)(han)數(shu)和析(xi)構(gou)函(han)(han)(han)數(shu)是C++類(lei)中基本的(de)(de)四大函(han)(han)(han)數(shu)。當(dang)設計(ji)一個(ge)類(lei)時,要(yao)首先考(kao)慮這四大函(han)(han)(han)數(shu)的(de)(de)寫法。若(ruo)沒有提供顯式的(de)(de)實現,編譯(yi)器會產生默(mo)認(ren)的(de)(de)函(han)(han)(han)數(shu)。若(ruo)類(lei)中有指(zhi)針成員,必(bi)須提供這四大函(han)(han)(han)數(shu)的(de)(de)實現,否(fou)則容易出現內(nei)存錯誤(wu)。本文針對賦值函(han)(han)(han)數(shu)進行了(le)分析(xi),包括其原型(xing),調(diao)用場合,存在的(de)(de)必(bi)要(yao)性(xing)等方面(mian)。

1. 賦值函數原型

A& operator =( const A& other) { … &hellip; }

2. 調用場合

A a1(10);        // 為a1調用構造函數
        A a2;         // 為a2調用默認構造函數
        a2 = a1;        // 為a2調用賦值函數。
        A & operator =(const A &a){
                if (&a == this)
                        return *this; 
                //... 具體賦值操作
            &nbsp;   return *this;}

3.考察:

1) 為何首先檢查同一性?

答:為了防止(zhi)自(zi)賦(fu)值(zhi)

2) (a=b)=c或者a=(b=c)是(shi)否(fou)合法

答:合法

3) 若定義(yi)為(wei)void operator =(const A &a) 有何局限?

答(da):沒有了返回值,就(jiu)不能(neng)實現a=b=c 這樣的鏈式復值。用(yong)法(fa)不夠靈活。

4) 賦值函數存(cun)在的必要性

答:以類String的(de)兩個(ge)對象(xiang)a,b為例,假(jia)設a.m_data的(de)內(nei)(nei)容為“hello”,b.m_data的(de)內(nei)(nei)容為“world”。現將a賦(fu)給b,缺省賦(fu)值函數的(de)“位(wei)拷貝”意味著執行b.m_data = a.m_data。這將造(zao)成(cheng)三(san)個(ge)錯(cuo)誤:一(yi)(yi)(yi)是(shi)b.m_data原有的(de)內(nei)(nei)存(cun)沒被(bei)釋放(fang),造(zao)成(cheng)內(nei)(nei)存(cun)泄露;二是(shi)b.m_data和a.m_data指向同一(yi)(yi)(yi)塊內(nei)(nei)存(cun),a或b任(ren)何一(yi)(yi)(yi)方(fang)變動都會影(ying)響另(ling)一(yi)(yi)(yi)方(fang);三(san)是(shi)在對象(xiang)被(bei)析構時,m_data被(bei)釋放(fang)了兩次(ci)。

5) 若定義為(wei)A operator =(const A &amp;a){...return *this;},有何(he)局限?

答:若返回值改成(cheng)了不是(shi)引用類型,則有(you)兩個局限。

第(di)一:對于a=(b=c), 操作仍然(ran)可以(yi)正常進行,但效率降低了。

因為此時的(de)賦值函數會(hui)產生一(yi)個臨時對(dui)象,類(lei)似于 A tmp=*this. 假設b=c操作產生tmp1, 然后執(zhi)行(xing)a=tmp1,該過(guo)程還(huan)會(hui)產生臨時對(dui)象tmp2。還(huan)會(hui)有tmp1, tmp2的(de)析構(gou)。過(guo)程變得復雜許多。

第二(er):對于(a=b)=c, 操作不能以期望的方式進行。

假設(she)a=b產生臨時對象tmp1, 然后tmp1=c, 這樣a不能獲得(de)c的值,與(yu)常識不符。

發表評論
評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)