Effective C++ 条款05
了解C++默默編寫并調(diào)用哪些函數(shù)。Know what functions C++ silently writes and calls
?
有如下函數(shù)會被編譯器自動生成,如果在這些函數(shù)需要被調(diào)用時,且這個對象的作者自己沒有創(chuàng)建對應(yīng)函數(shù)。
注意,只有當(dāng)這些函數(shù)被需要調(diào)用時,編譯器才會創(chuàng)建這些函數(shù)。
?
對于copy構(gòu)造函數(shù)和賦值操作符,編譯器創(chuàng)建的版本只是單純的將來源對象的每一個Non-static 成員變量拷貝到目標對象。
另外,也會存在編譯器拒絕為class 生成賦值操作符或者是拷貝構(gòu)造函數(shù)的情況:
第一:如果父類的拷貝構(gòu)造函數(shù)為private,那么子類不會自動生成拷貝構(gòu)造函數(shù)。因為子類的拷貝構(gòu)造函數(shù)需要調(diào)用父類的拷貝構(gòu)造函數(shù)。
第二:只有當(dāng)生成的代碼合法,且有適當(dāng)機會證明它有意義,對應(yīng)函數(shù)才會自動生成。(以下面為例)
template <T> class NamedObject { public:NamedObject(std::string &name,const T& value);............ private: Tstd::string &nameValue;const T& objectValue; }
這時,有如下情況:
std::string newDog("Persephone"); std::string oldDog("Satch"); NamedObject<int> p(newDog,2); NamedObject<int> s(oldDog,3); p=s;?
當(dāng)代碼p=s這一句時,編譯器會為NamedObject 生成賦值操作符函數(shù),但是,C++ 不允許引用類型被初始化以后再指向其他對象。所以這里,編譯器的動作是拒絕生成賦值操作符函數(shù)。因此編譯失敗。
轉(zhuǎn)載于:https://www.cnblogs.com/lucy-lizhi/p/7443062.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Effective C++ 条款05的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU 1426 Sudoku Kill
- 下一篇: 爬虫相关