在c++ 中,當我們定義一個類時,我們顯式或隱式地定義了此類型的對象在拷貝、賦值和銷毀時做什么?
一個類通過定義三種特殊成員成員函數來控制這些操作:拷貝構造函數、拷貝賦值函數、析構函數。
什么是三法則
C++三法則:如果需要析構函數,則一定需要拷貝構造函數和拷貝賦值操作符。
如何理解這句話,通常,若一個類需要析構函數,則代表其合成的析構函數不足以釋放類所擁有的資源,其中最典型的就是指針成員。
所以,我們需要自己寫析構函數來釋放給指針所分配的內存來防止內存泄露。
那么為什么說“一定需要拷貝構造函數和賦值操作符”呢?
原因還是這樣:類中出現了指針類型的成員。有指針類型的成員,我們必須防止淺拷貝問題,所以,一定需要拷貝構造函數和賦值操作符,這兩個函數是防止淺拷貝問題所必須的。
什么是五法則
在較新的 C++11 標准中,為了支持移動語義,又增加了移動構造函數和移動賦值運算符,這樣共有五個特殊的成員函數,所以又稱為“C++五法則”;
也就是說,“三法則”是針對較舊的 C++89 標准說的,“五法則”是針對較新的 C++11 標准說的;為了統一稱呼,后來人們干把它叫做“C++ 三/五法則”;
博客參考:https://blog.csdn.net/chen1415886044/article/details/104074210