當前位置:
首頁 > 最新 > Linux C+拷貝賦值與拷貝構造!

Linux C+拷貝賦值與拷貝構造!

簡 介

本章主要介紹一下C++類中常見的拷貝構造與拷貝賦值的相關概念及其使用實例。這裡也是在平時的項目或者筆試面試的重點內容。

淺拷貝

預設方式的拷貝構造和拷貝賦值函數,對包括指針在內的基本類型成員變數按位元組複製,這樣會導致淺拷貝問題。

在以上代碼中沒有定義拷貝構造函數,系統會按照預設的方式進行拷貝構造,而預設的拷貝構造函數會對兩個數據成員均採用位元組複製的方法。複製的結果是stu1.m_name指向了stu.m_name指向的空間,是stu.m_name指針的淺拷貝。如果stu對象先釋放了,則stu1.m_name將變成野指針。

深拷貝實現拷貝賦值與拷貝構造

為了獲得完整意義上的對象副本,為了避免淺拷貝的出現,必須自己定義拷貝構造和拷貝賦值,針對指針型成員變數做深拷貝

在C++中預定義的賦值運算符的操作對象只能是基本數據類型。但實際上,對於許多用戶自定義類型(特別是類中),同樣需要賦值運算操作,而且經常要用到賦值操作。這時就必須在C++中重新定義賦值運算符,賦予賦值運算符新的功能,使它能夠用於用戶自定義類型執行用戶自定義的操作。

以上代碼中的自定義拷貝構造函數為stu1.m_name在堆上分配了存儲空間,這樣就真正實現了深拷貝。即使stu對象先釋放了,stu1.m_name指向的空間仍然存在。

以上代碼中的複製運算符的重載函數中,if (&student!= this)表示如果沒有進行自賦值時才進行以下操作。在分配資源時需要注意:先分配新資源再釋放舊資源是有意義的,即使目標對象的新資源分配失敗,其原有的內容也不至於遭到破壞。這個賦值運算符函數的返回值是Student&,目的是滿足賦值表達式這樣可以實現連續賦值。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

不知道這些,你的醫美項目可能白做了(上)

TAG:全球大搜羅 |