淺拷貝建構函式
看一段拷貝建構函式的**
#include #include using namespace std;
class array{
public :
array(){
cout<<"array()"《類array例項化乙個arr1的物件,並給資料成員m_icount賦值為5。
接著類array例項化乙個物件arr2並將arr1的資料成員的值拷貝給arr2
執行**,顯然arr1和arr2的資料成員m_icount的值都為5,系統給arr1,arr2分配了記憶體空間並使得arr1的值複製給了arr2
接下來再看一段**:
#include #include using namespace std;
class array{
public :
array(int _count){
m_icount = _count;
m_parr = new int[m_icount];
cout<<"array()"《當類中存在資料成員需要動態開闢記憶體空間的時候,需要使用深拷貝的方式
區別:
在某些狀況下,類內成員變數需要動態開闢堆記憶體,如果實行位拷貝,也就是把物件裡的值完全複製給另乙個物件,如a=b。這時,如果b中有乙個成員變數指標已經申請了記憶體,那a中的那個成員變數也指向同一塊記憶體。這就出現了問題:當b把記憶體釋放了(如:析構),這時a內的指標就是野指標了,出現執行錯誤。
深拷貝和淺拷貝可以簡單理解為:如果乙個類擁有資源,當這個類的物件發生複製過程的時候,資源重新分配,這個過程就是深拷貝,反之,沒有重新分配資源,就是淺拷貝。
C 拷貝建構函式 深拷貝與淺拷貝
深拷貝函式主要是解決拷貝函式不能直接拷貝指標所指記憶體的資料的問題 其次,介紹一下什麼是拷貝建構函式以及拷貝建構函式將在何時被呼叫?拷貝建構函式是一種特殊的建構函式,其形參是本類物件的引用,其作用是使用乙個已經存在的物件來初始化 乙個新的同類的物件。何時被呼叫?當用類的物件去初始化另外乙個物件的時候...
拷貝建構函式,深拷貝與淺拷貝
一.拷貝建構函式 先直接來看 include include help.h using namespace std class line private char msg line line const char msg line line const line line line line voi...
C 拷貝建構函式 深拷貝,淺拷貝
對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 88 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。執行程式,螢幕輸出100。從以上 的執行結果可以看出,系統為物件b分配了記憶體並完成了與物件a的複製過程。就...