程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ 淺拷貝與深拷貝

C++ 淺拷貝與深拷貝

編輯:C++入門知識

何為淺拷貝和深拷貝?   淺拷貝其實只是復制對象,而不復制它引用的對象。即,拷貝對象的所有變量都含有被拷貝對象所含有的值,而且拷貝對象對其他對象的引用仍然指向原來的對象。例如:   char ori[]=“hello”;   char *copy=ori;   這裡copy的賦值操作就是淺拷貝;copy的值等於ori的值,並且copy所指向的對象與ori相同,但是copy與ori並不是完全相等,並沒有完全復制ori。   char ori[]="hello";   char *copy=new char[];   copy=ori;   深拷貝是把要復制的對象所引用的對象都復制了一遍,也就是復制對象含有了被復制對象相同的值,但是引用的對象是被復制過的新對象,而不再是被復制對象所指的對象。   其實在OC中是一個經常遇到的問題,OC保留了obtain,assign,copy等關鍵字來強調淺拷貝和深拷貝,而在C++語言裡沒有專門來強調這些。下面我們來分析一下下面的代碼:   class A {  char* a;  public:  A() { a= (char*)malloc(10);}  ~A() {if(NULL != a) free(a);}  };    void process()  {  A a, b;  a = b;  } 這段代碼就是典型的深拷貝與淺拷貝的理解錯誤問題。   C++默認的是執行類屬性的淺拷貝啊,這裡a對象只是淺拷貝了b對象,即使用了淺復制 a分配的內存,沒有得到釋放 b分配的內存釋放了兩邊,因此這裡會有內存洩露。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved