色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

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

構造函數,拷貝構造函數,賦值函數和析構函數是C++類中基本的四大函數。當設計一個類時,要首先考慮這四大函數的寫法。若沒有提供顯式的實現,編譯器會產生默認的函數。若類中有指針成員,必須提供這四大函數的實現,否則容易出現內存錯誤。本文針對賦值函數進行了分析,包括其原型,調用場合,存在的必要性等方面。

1. 賦值函數原型

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

2. 調用場合

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

3.考察:

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

答:為了防止自賦值

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

答:合法

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

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

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

答:以類String的兩個對象a,b為例,假設a.m_data的內容為“hello”,b.m_data的內容為“world”。現將a賦給b,缺省賦值函數的“位拷貝”意味著執行b.m_data = a.m_data。這將造成三個錯誤:一是b.m_data原有的內存沒被釋放,造成內存泄露;二是b.m_data和a.m_data指向同一塊內存,a或b任何一方變動都會影響另一方;三是在對象被析構時,m_data被釋放了兩次。

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

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

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

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

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

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

發表評論
評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
主站蜘蛛池模板: 午夜精品a片一区二区三区 gogogo高清在线观看免费中国 | 中文字幕在线免费观看 | 免费无码十八禁污污网站 | 日本XXXXX片免费观看喷水 | 我的徒弟都是大反派动漫在线观看 | 四lll少妇bbbb搡bbbb| 亚洲人成色777777老人头 | 欧美35页视频在线观看 | 97超碰国产精品无码分类 | 日本在线视频WWW鲁啊鲁 | 中文字幕乱码人在线视频1区 | 国产精品久久无码一区二区三区网 | 国产精品99精品一区二区三区 | 无码精品国产DVD在线观看9久 | 日本免码va在线看免费最新 | 野花在线观看免费视频 | 日本xxx在线观看免费播放 | 粉嫩高中生无码视频在线观看 | 国产毛A片啊久久久久久A | 中文字幕av久久人妻蜜桃臀 | 欧美日韩黄网 | 精品人妻大屁股白浆无码 | 少妇熟女视频一区二区三区 | 成人18免费观看的动漫 | 奶涨边摸边做爰爽别停快点文 | 在线亚洲精品国产一区麻豆 | 色多多A级毛片免费看 | 日本亚洲洲精品码无无专区 | 成人VA亚洲VA欧美天堂 | 成人AV片无码免费天天看 | www.四虎在线观看 | 青青草国产成人久久 | 欧美牲交videossexeso欧美 | 大尺度露器官的三级 | 中文字字幕在线中 | www欧美在线观看 | 大地资源在线观看官网第三页 | 国产欧美成人精品第二区 | 日本在线A一区视频高清视频 | 国产肥白大熟妇bbbb | 亚洲成a人片在线观看视频 欧洲日韩在线 |