// 淺拷貝:
class
string
string
(const string &s)
:_str
(s._str)
string &
operator=(
const string &s)
//返回引用是為了連續的賦值
return
*this;}
~string()
// 防止野指標的出現
_str =
null;}
char
*_str_get()
void
_str_set
(const
char
*s)private
:char
*_str;
};
淺拷貝的方式就是將類中的指標指向新的指標
這樣就是實現了兩個執政指向同一空間
問題1:通過類1修改空間內容,類2的內容也回改變
問題2:如果通過類1釋放該空間過後,再通過類2釋放空間就會出錯
// 深拷貝:
class
mystring
mystring
(const mystring &s)
:_str
(null
) mystring &
operator=(
const mystring &s)
//返回引用是為了連續的賦值
return
*this;}
~mystring()
_str =
null;}
char
*_str_get()
void
_str_set
(const
char
*s)private
:char
*_str;
};
深拷貝的方式就是通過重新構造乙個區域性類temp獲取新的指標
然後通過swap交換兩個類的指標,相當於使_str重新指向乙個新開闢的空間
因為是區域性類,執行完函式過後相應的就會被釋放掉
#include
#include
using
namespace std;
// 淺拷貝:
class
string
string
(const string &s)
:_str
(s._str)
string &
operator=(
const string &s)
//返回引用是為了連續的賦值
return
*this;}
~string()
// 防止野指標的出現
_str =
null;}
char
*_str_get()
void
_str_set
(const
char
*s)private
:char
*_str;};
// 深拷貝:
class
mystring
mystring
(const mystring &s)
:_str
(null
) mystring &
operator=(
const mystring &s)
//返回引用是為了連續的賦值
return
*this;}
~mystring()
_str =
null;}
char
*_str_get()
void
_str_set
(const
char
*s)private
:char
*_str;};
intmain
(int argc,
char
**ar**)
C 深淺拷貝
當結構體中沒有指標時,可進行淺拷貝,資料也會從乙個結構體拷貝到另乙個結構體 兩個結構體都存乙份資料 但當結構體中有指標的時候,假如使用使用淺拷貝,會使兩個結構體使用的指標都指向同乙個記憶體位址,在析構的時候會造成記憶體洩漏。深拷貝 需要對含有指標的結構體,使用 new 申請新的記憶體空間去儲存拷貝的...
c 深淺拷貝
對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 88 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。執行程式,螢幕輸出100。從以上 的執行結果可以看出,系統為物件b分配了記憶體並完成了與物件a的複製過程。就...
深淺拷貝以及深淺拷貝的方法
先考慮一種情況,對乙個已知物件進行拷貝,編譯系統會自動呼叫一種建構函式 拷貝建構函式,如果使用者未定義拷貝建構函式,則會呼叫預設拷貝建構函式。執行結果 呼叫一次建構函式,呼叫兩次析構函式,兩個物件的指標成員所指記憶體相同,name指標被分配一次記憶體,但是程式結束時該記憶體卻被釋放了兩次,會造成記憶...