如下:
int* first;int second;
first = new int[5];
second = first;
此時,first和second指標指向同乙個位址,都指向first所在的位址;
如果此時執行如下語句,
delete second;
那麼first和second所指向的陣列被刪除(因為共用乙個位址),
若再執行,
delete first;
那麼程式會因訪問錯誤位址而終止,因為此時first所指向的位址無效了。
要避免這種情況,可以重新申請乙個記憶體空間,如:
second = new [5];
此時first和second 分別指向不同的陣列,任意乙個陣列被刪除都不會影響另乙個陣列。
這就是淺層複製和深層複製的區別。
淺層複製和深層複製
淺層複製 深層複製 物件的淺層複製 class point point int x,int y x x y y int getx int gety void move int t,int q private int x,y class pts point類的動態陣列 封裝成了類 由上圖可知,上面的程...
C 淺層複製建構函式和深層複製建構函式
淺層複製建構函式 class person person person one 自定義淺層複製建構函式,就是複製乙個物件,說到底,就是複製傳進來的物件的所有成員變數,實際上,系統的預設淺層複製建構函式也是類似這樣的原理 person void setheight int h int getheigh...
理解一般指標和指向指標的指標
在說指向指標的指標之前,不得不說指向變數的指標。先看如下示例 1.指向整型指標 先看如下示例 1 include 2 using namespace std 3 4 int main 5 執行結果如下 我們先看下記憶體分配圖 由上圖可以清楚的知道,輸出整形變數a的值是5,指標變數p的值是001bfd...