new delete 析構函式 自動型別轉換

2022-06-25 08:36:11 字數 1795 閱讀 8952

分配記憶體,返回指標

new 型別名t (初值列表)

功能:申請用於存放t型別物件的記憶體空間,並依初值列表賦以初值

結果值:

成功->t型別的指標,指向新分配的記憶體

失敗->0(null)

int *pl = new

int;

int *pl = new

int(10);

注意與malloc的區別

sizeof(x):計算變數x的長度。

free(p):釋放指標p所指變數的儲存空間,即徹底刪除乙個變數。

功能:釋放指標p所指向的記憶體。p必須是new操作的返回值。

delete pl;

如果建構函式使用new來分配記憶體,則析構函式將使用delete來釋放這些記憶體。如果建構函式沒有使用new,析構函式實際上沒有需要完成的任務。在這種情況下,只需要讓編譯器生成乙個什麼都不需要做的隱式析構函式即可。

通常由編譯器決定什麼時候呼叫析構函式,**中不會顯式的呼叫析構函式(當然也會存在例外的情況)。如果建立的是靜態儲存物件,則其析構函式將在程式結束時自動呼叫。如果建立的是自動儲存類物件,則其析構函式將在程式執行完**塊時自動被呼叫。如果是通過new建立的,則它將駐留在棧記憶體或自由儲存區中,當使用delete來釋放記憶體時,其析構函式將自動被呼叫。最後,程式可以建立臨時物件來完成特定的操作,在這種情況下,程式將在結束對該物件的使用時自動呼叫其析構函式。

由於在類物件過其實析構函式將被自動呼叫,因此必須有乙個析構函式。如果程式設計師沒有提供析構函式,編譯器將隱式地宣告乙個預設析構函式,並在發現導致物件被刪除的**後,提供預設析構函式的定義。

#include #include 

using

namespace

std;

class

point ;

point::point(

int _x, int

_y)

point::~point()

ostream& operator

<<(ostream& os, const point&p)

template

class

dynamicarray ;

template

dynamicarray

::dynamicarray(unsigned length, const t&content)

};template

dynamicarray

::~dynamicarray() ;

template

dynamicarray

::dynamicarray(const dynamicarray&anotherda) ;

template

dynamicarray

& dynamicarray::operator=(const dynamicarray&anotherda)

template

unsigned

int dynamicarray::capacity() const

template

t& dynamicarray::operator(unsigned int

i) //

studybarcommentbegin

intmain()

iarray3 = iarray2 =iarray;

cout

return0;

}//studybarcommentend

C 析構函式 虛析構函式

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

建構函式 析構函式 虛析構函式

說析構函式之前,先說下建構函式。建構函式用來完成對物件的一系列初始化操作,主要作用有 1.給建立的物件建立乙個識別符號 2.為物件資料成員開闢記憶體空間 3.完成物件資料成員的初始化 當並未顯示的定義建構函式時,會生成乙個預設的建構函式,預設建構函式不能完成物件資料成員的初始化,只能給物件建立一識別...

vs 不能自動 析構函式 虛函式

引用 說明 使用虛函式,系統會有一定的空間開銷。當乙個類帶有虛函式時,編譯系統會為該類構造乙個虛函式表 位於類內其他成員前面 是乙個指標陣列,存放每個虛函式的入口位址。系統在進行動態關聯的時間開銷很少,提高了多型性的效率。編譯器生成的析構函式都是非虛的,除非是乙個子類,其父類有個虛析構函式,此時的虛...