複製運算子函式

2021-06-21 12:07:46 字數 816 閱讀 1850

題目:如下cmystring的宣告,請為該型別新增賦值運算子函式。

#pragma once

#include class cmystring

;

需要考慮以前四點:

1:是否把返回值的型別宣告為該型別的引用,並在函式結束前返回例項的引用。只有返回乙個引用,才允許連續賦值操作。例如,有3個cmystring型別的物件:str1,str2,str3,可以進行str1=str2=str3,如果返回值是void,如果執行str1=str2=str3,則不能通過編譯。

2:是否把傳入的引數宣告為常量引用。如果傳入的引數不是引用而是例項,那麼就會從形參道實參會呼叫一次複製建構函式。並且這樣在賦值運算函式內不會改變傳入的例項。

3:是否釋放了例項自身占有的記憶體。如果我們忘記在分配記憶體前釋放之前占有的空間,程式將會出現記憶體洩露。

4:是否判斷傳入的引數和例項是不是同乙個例項。如果沒有判斷,就會出現嚴重的問題。當傳入的例項和*this是同乙個記憶體,那麼一旦釋放了例項的記憶體,傳入的引數也釋放了記憶體,因此就再也找不到需要賦值的內容了。

初級的程式:

更安全的程式:

cmystring& cmystring::operator=(const cmystring& str)

return *this;

};//函式結束後 釋放strtemp.m_pdata占有的空間,也就是之前this指向的位址的空間

複製建構函式和賦值運算子

進行c 類設計時,如果不對複製建構函式和賦值運算子進行重寫的話,編譯器會預設呼叫預設函式。預設的複製建構函式和賦值運算子會造成許多問題。先看下面一段 include include class my string int my string num string 0 my string my str...

C 複製建構函式,過載賦值運算子

c 的複製建構函式,賦值建構函式,有時候會有點暈,下面總結一下 首先來談一下複製建構函式 includeusing namespace std include includeclass a void fuction void show int main 解釋 定義了乙個類,資料成員有字元指標,和整型...

12 1 複製建構函式和賦值運算子

特點 靜態資料成員,永遠只建立乙個儲存空間,所有物件共享,可以用來判斷建立了多少個物件的功能。在類的宣告時不分配記憶體 靜態類成員不是物件的組成部分 例項 class badstring 若要實現計數建立物件個數,則建構函式可以為 badstring badstring char n,int a 初...