日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Effective C++学习笔记——构造/析构/拷贝运算

發布時間:2025/3/13 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Effective C++学习笔记——构造/析构/拷贝运算 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
條款9:決不再構造和析構過程中調用virtual函數,包括通過函數間接調用virtual函數。 應用:想在一個繼承體系中,一個derived class被創建時,某個調用(例如生成相應的日志log)會有相對應的實現。 原因: base class的構造函數會先被調用,而在base class 構造期間virtual函數絕不會下降到dedrived class階層。事實上,C++的其它部分(dynamic_cast & typeid),在此期間也是一樣的把對象視為base class。 解決辦法:籍由”令derived class 將必要的構造信息向上(通過函數參數)傳遞至base class的構造函數“。可以在dedrived class中定義一個private static函數來得到該構造信息, 定義為static是為了避免使用尚未初始化好的dedrived class 成員。 條款10、11: 令assignment操作符返回一個reference to *this。同時注意在operator=中處理”自我復制“! 說明:operator=要考慮”自我復制安全性“和”異常安全性“。涉及的技術包括:比較”來源對象“和”目標對象“的地址、精心周到的語句順序、以及copy-and-swap技術。 1: class A 2: { 3: ... 4: private: 5: int *p; 6: } 7: //1 各種不安全 8: A& A::operator=(const A& rhs) 9: { 10: delete p; 11: p = new A(*rhs.p); 12: return *this; 13: } 14: 15: //2 語句順序的改變,帶來“自我復制安全”(雖然也許不夠高效)與“異常安全”。 16: A& A::operator=(const A& rhs) 17: { 18: pOrig = p; 19: p = new A(*rhs.p); 20: delete pOrig; 21: return *this; 22: } 23: 24: //3 copy-and-swap技術 25: void A::swap(A& rhs) 26: { 27: ...//交換*this與rhs 28: } 29: A& A::operator=(const A& rhs) 30: { 31: A temp(rhs); 32: swap(rhs); 33: return *this; 34: } 35: 36: //4 巧妙伶俐的利用值傳遞在制造臨時副本,即使有可能更為高效(在“函數參數構造”)卻犧牲了清晰性。 37: A& A::operator=(const A rhs) 38: { 39: swap(rhs); 40: return *this; 41: } 條款12:復制對象時勿忘其每一個成分 備注:不要嘗試以某個copying函數來實現另一個copying函數(copy構造函數,operator=函數)。

轉載于:https://www.cnblogs.com/oldpeanut/p/3349792.html

總結

以上是生活随笔為你收集整理的Effective C++学习笔记——构造/析构/拷贝运算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。