分配記憶體,返回指標
new 型別名t (初值列表)
功能:申請用於存放t型別物件的記憶體空間,並依初值列表賦以初值
結果值:
成功->t型別的指標,指向新分配的記憶體
失敗->0(null)
int *pl = newint;
int *pl = new
int(10);
注意與malloc的區別
sizeof(x):計算變數x的長度。
free(p):釋放指標p所指變數的儲存空間,即徹底刪除乙個變數。
功能:釋放指標p所指向的記憶體。p必須是new操作的返回值。
delete pl;
如果建構函式使用new來分配記憶體,則析構函式將使用delete來釋放這些記憶體。如果建構函式沒有使用new,析構函式實際上沒有需要完成的任務。在這種情況下,只需要讓編譯器生成乙個什麼都不需要做的隱式析構函式即可。
通常由編譯器決定什麼時候呼叫析構函式,**中不會顯式的呼叫析構函式(當然也會存在例外的情況)。如果建立的是靜態儲存物件,則其析構函式將在程式結束時自動呼叫。如果建立的是自動儲存類物件,則其析構函式將在程式執行完**塊時自動被呼叫。如果是通過new建立的,則它將駐留在棧記憶體或自由儲存區中,當使用delete來釋放記憶體時,其析構函式將自動被呼叫。最後,程式可以建立臨時物件來完成特定的操作,在這種情況下,程式將在結束對該物件的使用時自動呼叫其析構函式。
由於在類物件過其實析構函式將被自動呼叫,因此必須有乙個析構函式。如果程式設計師沒有提供析構函式,編譯器將隱式地宣告乙個預設析構函式,並在發現導致物件被刪除的**後,提供預設析構函式的定義。
#include #includeusing
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 不能自動 析構函式 虛函式
引用 說明 使用虛函式,系統會有一定的空間開銷。當乙個類帶有虛函式時,編譯系統會為該類構造乙個虛函式表 位於類內其他成員前面 是乙個指標陣列,存放每個虛函式的入口位址。系統在進行動態關聯的時間開銷很少,提高了多型性的效率。編譯器生成的析構函式都是非虛的,除非是乙個子類,其父類有個虛析構函式,此時的虛...