C 類物件之間賦值產生記憶體洩漏的一種情況

2021-07-26 22:30:21 字數 744 閱讀 1365

在用c++ 中定義的類,如果類成員中涉及到了指標以及開闢記憶體的問題,這樣的類物件之間的賦值很容易造成記憶體的洩漏,見下面的一種情況。**如下:

class image

;image::image(int w, int h, int value)

{ width = w;

height = h;

pimg = new int[w*h];

for(int i=0;i主函式的**如下:

image a(100, 100, 100);

cout << a.pimg << endl;

image b(100, 100, 10);

cout << b.pimg << endl;

cout << b.pimg[10] << endl;

b =a;

cout << b.pimg << endl;

cout << b.pimg[10] << endl;

return 0;

**中,物件a和b都在析構函式中開闢了記憶體,但是後來將a直接賦值給b,執行結果如下:

結果顯示:a和b物件建立後,分別呼叫析構函式開闢了記憶體,且a和b指標成員的記憶體的位址不同,以及開始的資料也不同。但是在將物件a賦值給物件b之後,物件b的指標成員的位址和a的一樣,即:物件b的指標成員指向了a的物件所開闢的記憶體。這樣導致了記憶體洩漏,物件b原始的記憶體開闢了,但是一直沒有使用,即使想釋放也無法釋放,因為丟失了其起始的位址。

基類物件和派生類物件之間的賦值關係

基類物件和派生類物件之間的賦值關係具體是指 基類的物件可不可以賦值給子類物件或者子類物件可不可以賦值給基類物件。一般來說,只有派生類的物件可以賦值給基類的物件,反之,則不可以。例如 father a 基類物件 son b 派生類物件 a b 可以 b a 不可以為什麼派生類物件可以給基類物件賦值呢?...

基類物件和派生類物件之間的賦值關係

基類物件和派生類物件之間的賦值關係具體是指 基類的物件可不可以賦值給子類物件或者子類物件可不可以賦值給基類物件。一般來說,只有派生類的物件可以賦值給基類的物件,反之,則不可以。例如 father a 基類物件 son b 派生類物件 a b 可以 b a 不可以 為什麼派生類物件可以給基類物件賦值呢...

C 物件陣列釋放造成記憶體洩漏

物件陣列在釋放的時候,經常會遇到兩種情況,可能會造成記憶體洩漏 例如,geopoint是乙個類 class geopoint geopoint double x,double y geopoint public void setx double x void sety double y double...