c 中delete和析構函式之間的區別

2021-09-20 21:40:40 字數 744 閱讀 2386

delete=1.呼叫析構函式,釋放物件中的成員資源

2.歸還物件空間(free)

其中在呼叫析構函式的時候,有可能還會對其他物件進行delete,然後呼叫這個物件的析構函式。。。

看這個例子:

delete用於釋放new在堆中動態生成的物件空間。

釋放時會自動呼叫類的析構函式,在析構函式中用於釋放類內部動態分配的得到的資源。

然後delete再釋放整個物件所佔的記憶體空間

******:

#include

using std::cout;

using std::endl;

class ******

~******()

public:

void out()

}private:

//disable copy & assign control

******(const ******&);

const ******& operator=(const ******&);

private:

int *p;

int *parray;

};int main()

而delete this如果發生在析構函式中,每次delete---->呼叫析構函式,析構函式又delete this導致了堆疊記憶體。。。

如果是發生在成員函式中,之後如果不用到成員資源(比如某個成員變數和虛函式)可以,如果用到,會報錯,因為這塊資源已經被釋放掉,找不到資料了。

C 析構函式和虛析構函式。

析構函式如果不是虛的話,基類的析構函式將不會被呼叫。多型時,也就是派生類被基類指標所指,或者被基類別名 虛析構函式,被呼叫時,其自身的析構函式和基類的析構函式都將會被呼叫。非虛的時候,不進行多型,只有基類的會被呼叫。純虛析構函式 定義的時候除了加 0 還需要給出函式的實現。因為當遞迴的呼叫析構函式時...

C 中建構函式和析構函式

定義 它是一種特殊的方法。主要用來在建立物件時初始化物件,即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。另外,乙個類可以有多個建構函式 我們可以根據其引數個數的不同或引數型別的不同來區分它們 這就是建構函式的過載 特點 1.建構函式的命名必須和類名完全相同 2.建構函式的功能...

C 析構函式 虛析構函式

1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...