C 指標釋放問題

2021-08-25 05:22:02 字數 1462 閱讀 7648

今天看到了乙個問題,其實在專案中也經常遇到指標釋放的問題,先看看乙個簡單的指標釋放的問題:

問題如下:

(1)一般在c++類中有成員指標的話,會在類的析構函式裡釋放(delete)這個指標?

(2)基於(1),如果傳給這個成員指標不是乙個堆分配的指標,那類發生析構會發生錯誤,這個怎麼解決??

如下:

class a

}

/----------------------------------

/----------------------------------

1、析構函式裡只會delete在類的建構函式或初始化函式中new的指標;

2、不是new就別在析構中delete了, 另外delete之前 if (p != null),delete之後 p = null;

3、b是棧上變數,自動釋放,不能delete,delete要和new配對使用;

4、對這種情況,有個基本的原則:誰new,誰delete;

也有一種特殊的帶引用計數器的指標物件,但是也並非是別人delete,

而是在不使用的時候發出乙個減少引用計數的呼叫,當計數器降為0的時候,由這個物件自己delete。

c/c++ code?

a a;

int* b =newint(0);

a.p = b;

那是否可以在a的析構函式中寫delete呢?理論上說也是可以的,但是最好不要這樣做,在類外面new的,那麼也就請在類的外面delete,也就是說,上面**應該寫成:

c/c++ code?

a a;

int* b =newint(0);

a.p = b;

// ... 使用b

deleteb;

4. 因此,new和delete的對稱性包含兩方面的含義:

a. new和delete要成對出現。

b. 出現的位置,應當處於同乙個層面。

子函式的指標釋放問題

對於剛接觸程式設計的人在子函式數中申請動態空間時可能會心有疑問,我們在子函式中申請的動態空間是否需要釋放呢?若是需要釋放又該如何釋放呢?在子函式中申請的動態空間肯定是需要釋放的,否則會造成記憶體洩漏。如果這個動態空間不是你需要返回的值,則可以直接在子函式中進行釋放,但是如果你需要將這個動態空間返回上...

C 陣列釋放問題

今天做2級題時遇見乙個小問題 當時 我的修改如下 1 2 include 3 using namespace std 45 class myclass 1415 myclass 1620 21void print const 2229 private 30 int array 31int array...

C 關於指標釋放的概念

下面是自己總結的一些關於new建立類物件特點 ctest ptest new ctest delete ptest ptest用來接收類物件指標。不用new,直接使用類定義申明 ctest mtest 此種建立方式,使用完後不需要手動釋放,該類析構函式會自動執行。而new申請的物件,則只有呼叫到de...