第13章 複製控制 7

2021-09-30 09:01:04 字數 816 閱讀 1509

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型別的物件 作為非引用形參和引用形參傳遞,動態分配 作為函式返回值,進行賦值操作 作為元素放在...