通過new來動態分配記憶體並返回分配的記憶體首位址。
例如: int *ps=new int ;
或者開闢乙個記憶體塊
int *pt=new int [10];
同樣動態分配的記憶體 使用過後要記得**給系統,用delete 釋放
#include
using
namespace
std;
int main()
使用new ,delete要遵循以下規則:
1.不要使用delete來釋放不是new分配的空間。
2.不要使用delete釋放兩次記憶體塊。
3.new ,delete 和new [ ] ,delete [ ]要匹配使用。
4.對空指標null使用 delete 是安全的。
對於乙個類來說 ,要用new給它的物件分配空間,就必須調該類的建構函式,建立出的物件如果系統不再使用的時候用delete來釋放空間 就也要呼叫該類的析構函式來銷毀物件。下面詳細分析:
#include
using
namespace
std;
class test
~test()
private:
int _data;
};int main()
以上程式執行的結果為:
new分配記憶體的時候調了建構函式,delete銷毀的時候調了析構函式。
但是delete不是每次都調析構函式,在以下情況下析構函式會被呼叫:
1.物件是動態的,則執行完成定義該物件的程式塊時,將呼叫該物件的析構函式。
2.如果物件是靜態物件時,結束時呼叫。
3.物件是new創立的,並且當顯式使用delete刪除物件時,析構函式才會被呼叫。
new test [5]的時候會多申請test個位元組用來存放5 也就是建立物件的個數,以便以後釋放的時候釋放。
delete 的時候會先取存放的物件的個數((int )ps -1)==n
再析構物件 for迴圈析構n次 釋放。
最後關於定位new表示式
int array[10];
array[4]=0;
就等價於 new (array+4) int(4)
定位new表示式可以在已經開闢好的記憶體上建立物件,呼叫建構函式。
原型為 operator new(size_t ,where) where為該記憶體的首位址。
new動態分配記憶體(在堆上)
利用new生成動態無名變數 例如 int p1 double p2 p1 new int 12 1 p2 new double 100 2 delete p1 delete p2 1 分別表示動態分配了用於存放整型資料的記憶體空間,將初值12寫入該記憶體空間,並將首位址值返回指標p1。2 動態分配了...
New動態分配 Delete 釋放記憶體
在c 中,對於變數和物件都是編譯器在編譯時分配好的,對於陣列初始化時,無法確定多少記憶體,很容意造成大開小用的情況。new 動態分配 一般格式 1.指標變數名 new 型別識別符號 2.指標變數名 new 型別識別符號 初始值 3.指標變數名 new 型別識別符號 記憶體單元個數 開闢陣列的定義方法...
記憶體動態分配
陣列的元素儲存於記憶體中連續的位置上。當乙個陣列被宣告時,它所需要的內存在編譯時就被分配。但是,你也可以使用動態記憶體分配在執行時為它分配記憶體。malloc所分配的是一塊連續的記憶體。例如,如果請求它分配100個位元組的記憶體,那麼它實際分配的記憶體就是100個連續的位元組,並不會分開位於兩塊或多...