C 五大函式

2021-09-08 20:25:35 字數 775 閱讀 3205

析構函式:釋放掉在物件使用期間獲得的資源,包括關於任意的new操作呼叫對應的delete,關閉任何開啟的檔案,等等。

拷貝建構函式和移動建構函式:構造乙個新的物件,被初始化為與另乙個同樣型別物件相同的狀態。如果這個已存在的物件是乙個左值,那麼就用拷貝建構函式;而如果這個已存在的物件是乙個右值,那麼就用移動建構函式。在以下例項中將呼叫拷貝建構函式或移動建構函式(1)帶初始化的宣告(2)使用傳值呼叫(3)傳值返回的物件。

拷貝賦值和移動賦值(operator=):當=用於兩個先前均被構造過的物件時,則呼叫賦值運算子。lhs=rhs,如果rhs是乙個左值,那麼可通過使用拷貝賦值運算子完成;如果rhs是乙個右值,那麼可通過使用移動賦值運算子做到。預設時,拷貝賦值運算子是通過依次把拷貝賦值運算子用於每乙個資料成員而被實現。

通常情況下,如果乙個類由基本型別的資料成員組成,對其進行預設處理通常是有意義的。當時當指標作為資料成員時,假設該指標指向乙個動態定址的物件,預設的析構函式對那些指標型別的資料成員無能為力。不僅如此,拷貝建構函式和拷貝賦值運算子均賦值指標的值而不是指標所指向的物件。這樣,我們將有兩個例項,他們都包含指標,而指標又都指向相同的物件,這就是所謂的淺拷貝,但是典型情況我們應該得到深拷貝,從而得到整個物件的複製品。因此,當乙個類包含指標作為資料成員時,一般我們必須自己實現析構函式,拷貝賦值和拷貝建構函式。這麼做排除了移動的預設情形,因此還必須自己實現移動賦值和移動建構函式。

編寫五大函式的任意乙個,那麼顯示的考慮所有其他的幾個會是個好習慣。如以intcell類為例

~intcell(){cout<<「invoking destructor」<

mysql五大正規化 MySQL五大正規化

第一正規化 1nf 資料表的每一列都要保持它的原子特性,也就是列不能再被分割。這張表就不符合第一正規化規定的原子性,不符合關係型資料庫的基本要求,在關係型資料庫中建立這個表的操作就不能成功。不得不將資料表設計為如下形式。第二正規化 2nf 概率 屬性必須完全依賴於主鍵。下滿這張表不符合第二正規化的要...

Python 函式的五大引數

python的函式引數挺重要的,總結一下 1 位置引數 沒啥好說的,就是普通的引數。2 預設引數 引數形式 def power x,n 3 在函式定義時通過對乙個形參賦值的形式,來實現預設引數 特別注意 預設引數一定要為不可變物件 1 def add end l end 3 return l 原因解...

mysql五大儲存引擎 mysql五大儲存引擎

mylsam mylsam表無法處理事務,這就意味著有事務處理需求的表,不能使用mylsam儲存引擎。innodb innodb是乙個健壯的事務型儲存引擎mysql5.6版本以後innodb就是作為預設的儲存引擎。innodb還引入了行級鎖定和鍵外約束。memory 使用mysql memory儲存...