Effective C++ --2 构造/析构/赋值运算
上一部分Effective C++ --1 讓自己習慣C++
?
5、 了解C++默認編寫并調用哪些函數
(1)???編譯器暗自為類創建默認構造函數、拷貝構造函數、拷貝賦值函數和析構函數。
(2)???拷貝構造函數中對于內置類型通過拷貝bits來進行初始化,非內置類型通過調用成員變量的拷貝構造函數來進行初始化。
(3)???對于內含指針成員的類編譯器不會生出賦值操作,必須自己定義拷貝賦值函數。
6、 若不想使用編譯器自動生成的函數,就該明確拒絕
(1)???編譯器暗自創建的函數都是public,如果要阻止拷貝賦值等,必須明確聲明為private,可以不予實現。
(2)???也可以使用不能進行賦值拷貝等操作的基類。
7、 為多態基類聲明virtual析構函數
(1)???為了防止派生類對象經由一個基類指針被刪除時,派生的部分沒有被釋放的問題,需要把基類的析構函數聲明為virtual,此時調用派生類的析構函數。
(2)???如果一個類帶有任何virtual函數,它就應該擁有一個virtual析構函數;不用作基類使用的類,不應該聲明virtual析構函數。
8、 別讓異常逃離析構函數
(1)???析構函數絕對不要吐出異常。如果一個被析構函數調用的函數可能拋出異常,析構函數應該捕捉任何異常,然后吞下或者結束程序。
(2)???如果客戶需要對某個操作函數運行期間拋出的異常做出反應,那么類應該提供一個普通函數(而非在析構函數中)執行該操作。
9、 絕不在構造和析構過程中調用virtual函數
(1)???在基類構造期間,virtual函數不再是virtual函數,不具有多態作用,只是調用基類的函數而已。
10、令operate= 返回一個referece to *this
(1)???為了實現連鎖賦值,賦值操作符必須返回一個reference指向操作符的左側實參。
11、在operator中處理“自我賦值”
(1)防止自我賦值將值銷毀的問題,注意賦值的順序,也可以加一個“證同測試”來檢驗是否是自我賦值,這樣可以提高效率。
12、復制對象時勿忘其每一個成分
(1)當為class添加一個成員變量時,別忘了同時修改copying函數。
(2)copying函數應確保復制對象內所有的local成員變量,調用所有的基類的適當copying函數。
(3)copy 構造函數和copy賦值函數不要相互調用,為了消除重復代碼可以另寫一個函數供兩者調用。
?
總結
以上是生活随笔為你收集整理的Effective C++ --2 构造/析构/赋值运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Effective C++ --1 让自
- 下一篇: Effective C++ --3 资源