在物件導向的程式設計過程中,深拷貝問題:
1. 建構函式中有動態分配記憶體。
2.在賦值函式中,通過直接賦值時會造成被賦值物件並沒有分配記憶體,只是將被賦值物件內部的指標指向賦值物件動態分配好的位址,一旦賦值物件被銷毀,被賦值物件內部的指標指向內容已被銷毀,會造成無效引用,造成淺拷貝問題。
解決辦法:
通過引用計數解決問題,在賦值函式和賦值拷貝建構函式中將計數+1,析構是對計數進行判斷再銷毀。
class data
~data()
data(const data &)=delete;
data & operator=(const data &)=delete;
int *dat;
int ref;
};class a;
a::a()
:d(new data()){}
a::~a()
a::a(const a& ia)
:d(ia.d)
a& a::operatar=(const a& ia)
C 關於深拷貝和淺拷貝
在c 中,資料型別有值型別和引用型別 值型別包括 結構體 數值型別,bool型,使用者定義的結構體 列舉,可空型別。引用型別包括 陣列,使用者定義的類 介面 委託,object,字串。對於值型別的,拷貝是全拷貝,則是拷貝出另乙個物件,兩個物件的記憶體位址是不同的,乙個物件的屬性修改後不影響另乙個物件...
c 過程中遇到的關於建構函式和繼承的問題
3 學習c 過程中遇到的關於建構函式和繼承的問題 using system using system.collections.generic using system.text class car vechicle static void main string args 問題如下 1 建構函式 是...
c 中的深拷貝和淺拷貝
我們有時候會聽說c 中有深拷貝和淺拷貝的說法,那麼深拷貝和淺拷貝的區別是什麼呢?簡單來說,淺拷貝就是簡單的賦值拷貝操作 而深拷貝是程式設計師手動在堆區重新申請一塊記憶體然後進行拷貝操作,那麼這麼做的意義何在呢,請看下面的乙個場景,include include using namespace std...