13.5.2 定義值型類
具有值語義的類所定義的物件,其行為很像算術型別的物件,反之亦然。string類是值型類的乙個例子。
複製建構函式不再複製指標,它將分配乙個新的int物件,並初始化該物件以儲存與被複製物件相同的值。每個物件都儲存屬於自己的int值的不同副本。因為每個物件儲存自己的副本,所以析構函式將無條件刪除指標。
賦值操作符不需要分配新物件,它只是必須記得給其指標所指向的物件賦新值,而不是給指標本身賦值。
改變的是指標所指向的值,而不是指標。
class hasptr
hasptr(const hasptr &orig):ptr(new int(*orig.ptr)), val(orig.val){}
hasptr &operator= (const hasptr &);
~hasptr()
int *get_ptr() const
int get_int() const
void set_ptr(int *p)
void set_int(int i)
int get_ptr_val() const
void set_ptr_val(int val) const
private:
int *ptr;
int val;
};hasptr &hasptr::operator= (const hasptr &hasptr)
即使要將乙個物件賦值給它本身。賦值操作符也必須總是保證正確。本例中,即使左右運算元相同,操作本質上也是安全的,因此,不需要顯式檢查自身賦值。
第13章 複製控制
複製建構函式 賦值操作符和析構函式總稱為複製控制 copy control 複製建構函式可用於 1 根據另乙個同型別的物件顯式或隱式初始化乙個物件 2 複製乙個物件,將它作為實參傳給乙個函式 3 從函式返回時複製乙個物件 4 初始化順序容器中的元素,如vectorsev 5 分別用了預設建構函式和複...
第13章 複製控制 4
13.3 析構函式 析構函式可以完成資源 作為類建構函式的補充。1.何時呼叫析構函式 撤銷類物件時會自動呼叫析構函式。變數在超出作用域時應該自動撤銷。動態分配的物件只有在指向該物件的指標被刪除時才撤銷。如果沒有刪除指向動態物件的指標,則不會執行該物件的析構函式,物件就一直存在,從而導致記憶體洩漏,而...
第13章習題 複製控制
1.理解呼叫過程 include include using namespace std 定義exmpl類,該類給出複製控制成員和乙個預設建構函式,各成員函式輸出自己的名字。主程式中以不同方式使用exmpl型別的物件 作為非引用形參和引用形參傳遞,動態分配 作為函式返回值,進行賦值操作 作為元素放在...