回覆列表
-
1 # 使用者6176958511870
-
2 # 使用者1415180428147
需要定義一個非空的解構函式,也需要定義一個複製建構函式。
例如:
去寫一個string類時,會去寫個普通構造,複製構造,過載賦值運算子=,因為裡面有個指標變數char * pBuff,在解構函式中,一般都會將該指標置空,這樣的析構就是個非空的解構函式。
複製建構函式的引數型別一般都是const ,是因為複製建構函式是用引用方式傳遞複製物件,引用方式傳遞的是地址,因此在建構函式內對該引用的修改會影響源物件。而用物件a1構造a2時,自然不希望複製建構函式會改變a1的內容,因此要防止複製建構函式內部修改該引用,所以用const宣告。
有動態記憶體分配的類都要重寫解構函式以及複製建構函式以及過載賦值運算子。(之所以要重寫解構函式也是因為new的物件不會自動析構,即釋放記憶體)c++中解構函式呼叫時機 ①棧中定義的物件 程式會自動呼叫解構函式,例如CLassName object; 這樣宣告的物件,當程式執行到了物件作用域之外或者程式退出,物件都會被銷燬,當然解構函式也會被呼叫②堆中new的物件 使用new宣告的物件,必須手動呼叫delete才會呼叫解構函式 下面舉例如下:
①直接定義TestDestruct物件在棧中,會在程式結束的時候或者執行到作用域之外自動呼叫解構函式②new在堆中的物件沒有自動呼叫解構函式呼叫了delete之後才主動呼叫解構函式