c 再學習(淺拷貝,深拷貝與移動建構函式)

2021-09-26 16:00:57 字數 322 閱讀 4114

淺拷貝是什麼?深拷貝是什麼?兩者有什麼區別?

淺拷貝相當於新增了乙個指向物件的指標,和原物件公用同一塊記憶體,如果分別呼叫其建構函式,則會造成runtime error。

深拷貝則是新分配了一塊記憶體,並用乙個新的指標指向它。

顯然,深拷貝的消耗比淺拷貝要大,但是很多時候,我們不得不使用深拷貝——尤其是需要儲存修改資料前狀態時。

那麼,什麼是移動建構函式呢?

移動建構函式會獲取原物件的右值引用(什麼是右值),通常,如果我們需要銷毀乙個物件,之後又需要用到它時,就可以使用移動建構函式,它通過「竊取」,使得指向這一物件的其他指標無效,但又完全儲存了該物件的狀態。

拷貝構造 深拷貝與淺拷貝

拷貝建構函式用乙個已有同類物件的資料對正在建立的物件進行資料初始化 c 為類提供預設版本的拷貝建構函式 預設複製建構函式可以完成物件的資料成員值簡單的複製 物件的資料資源是由指標指示的堆時,預設複製建構函式僅作指標值複製,即為淺拷貝 class teachert 顯示的提供乙個拷貝建構函式,來完成深...

C 拷貝建構函式 深拷貝與淺拷貝

深拷貝函式主要是解決拷貝函式不能直接拷貝指標所指記憶體的資料的問題 其次,介紹一下什麼是拷貝建構函式以及拷貝建構函式將在何時被呼叫?拷貝建構函式是一種特殊的建構函式,其形參是本類物件的引用,其作用是使用乙個已經存在的物件來初始化 乙個新的同類的物件。何時被呼叫?當用類的物件去初始化另外乙個物件的時候...

C 淺拷貝與深拷貝建構函式

include using namespace std 淺拷貝和深拷貝區別 1.淺拷貝,若類中不存在拷貝建構函式,會提供預設拷貝建構函式 淺拷貝 可以進行物件值賦值 但當資料成員中存在需要在堆區申請空間時,析構時淺拷貝會造成空間雙重釋放問題 2.深拷貝,當資料成員中存在需要在堆區申請空間時,會呼叫深...