類的動態分配記憶體與釋放

2021-08-03 18:35:24 字數 937 閱讀 8733

在對類進行例項化時也許會批量申請

例如,申請10個account例項,

account *buf=new account[10];//申請記憶體,並呼叫預設建構函式

for(int i=0;i<10;i++)

new(buf+i) account("ab",i);呼叫用具有兩個引數的建構函式,在原來的記憶體上

上面的兩次呼叫建構函式,只能有乙個進行_name的記憶體的動態分配,否則兩次的 動態分配只呼叫一次析構函式,造成記憶體洩漏

在釋放記憶體時可以直接

delete buf//注意呼叫析構函式的順序是反的
因為buf就是account陣列,就會以此進行呼叫析構函式

也可以分別進行呼叫析構函式

for(int i=0;i<10;i++)

buf[i].~account();

不過我認為還是呼叫delete buf更能夠和上面的new對應,兩者只能使用乙個,

但是有乙個疑問就是buf只是申請例項本身的記憶體,而建構函式是在申請char*_name的記憶體,析構函式是刪除_name的記憶體,當再次進行delete時是刪除例項本身的記憶體,但是實際上卻不是這樣。

char *buf=new char [sizeof(account)*10];//預分配一定的記憶體

int offset=sizeof(account);//根據偏移量進行初始化

for(int i=0;i<10;i++)

//account *p=reinterpret_cast(buf);

account *ps=(account*)buf;

for(int i=0;i(ps);

delete buf;刪除記憶體

這個例子和上面的疑問相對應,只有在預分配的情況下才可以說的通

記憶體動態分配與釋放

1 c語言的函式malloc和free 1 函式malloc和free在標頭檔案中的原型及引數 void malloc size t size 動態配置記憶體,大小有size決定,返回值成功時為任意型別指標,失敗時為null。void free void ptr 釋放動態申請的記憶體空間,呼叫fre...

記憶體動態分配與釋放

1 c語言的函式malloc和free 1 函式malloc和free在標頭檔案中的原型及引數 void malloc size t size 動態配置記憶體,大小有size決定,返回值成功時為任意型別指標,失敗時為null。void free void ptr 釋放動態申請的記憶體空間,呼叫fre...

記憶體動態分配與釋放

記憶體的動態分配需要使用函式malloc,函式free和運算子sizeof來實現。函式malloc的原型是 void malloc unsigned int size 函式malloc的作用是在記憶體中分配乙個長度為size的連續儲存空間。函式的返回值是乙個指向分配空間的起始位置的指標。如果分配空間...