mallocä¸freeæ¯C++/Cè¯è¨çæ ååºå½æ°ï¼new/deleteæ¯C++çè¿ç®ç¬¦ãå®ä»¬é½å¯ç¨äºç³è¯·å¨æå
ååéæ¾å
å
2.对äºéå
é¨æ°æ®ç±»åç对象èè¨ï¼å
ç¨maloc/freeæ æ³æ»¡è¶³å¨æ对象çè¦æ±ã对象å¨å建çåæ¶è¦èªå¨æ§è¡æé å½æ°ï¼å¯¹è±¡å¨æ¶äº¡ä¹åè¦èªå¨æ§è¡ææå½æ°ãç±malloc/freeæ¯åºå½æ°èä¸æ¯è¿ç®ç¬¦ï¼ä¸å¨ç¼è¯å¨æ§å¶æéä¹å
ï¼ä¸è½å¤ææ§è¡æé å½æ°åææå½æ°çä»»å¡å¼ºå äºmalloc/freeã
3.å æ¤C++è¯è¨éè¦ä¸ä¸ªè½å®æå¨æå
ååé
ååå§åå·¥ä½çè¿ç®ç¬¦newï¼ä»¥ä¸ä¸ªè½å®ææ¸
çä¸éæ¾å
åå·¥ä½çè¿ç®ç¬¦deleteã注ænew/deleteä¸æ¯åºå½æ°ã
4.C++ç¨åºç»å¸¸è¦è°ç¨Cå½æ°ï¼èCç¨åºåªè½ç¨malloc/free管çå¨æå
åã
5.newå¯ä»¥è®¤ä¸ºæ¯mallocå æé å½æ°çæ§è¡ãnewåºæ¥çæéæ¯ç´æ¥å¸¦ç±»åä¿¡æ¯çãèmallocè¿åçé½æ¯void*æéã
new deleteå¨å®ç°ä¸å
¶å®è°ç¨äºmalloc,freeå½æ°
6.new建ç«çå¯¹è±¡ä½ å¯ä»¥æå®å½æä¸ä¸ªæ®éç对象,ç¨æåå½æ°è®¿é®,ä¸è¦ç´æ¥è®¿é®å®çå°å空é´;mallocåé
çæ¯ä¸åå
ååºå,å°±ç¨æé访é®å¥½äº,èä¸è¿å¯ä»¥å¨éé¢ç§»å¨æé.
7.new 建ç«çæ¯ä¸ä¸ªå¯¹è±¡ï¼mallocåé
çæ¯ä¸åå
å.
***************************************
ç¸åç¹ï¼é½å¯ç¨äºç³è¯·å¨æå
ååéæ¾å
å
ä¸åç¹ï¼
(1)æä½å¯¹è±¡ææä¸åã
mallocä¸freeæ¯C++/C è¯è¨çæ ååºå½æ°ï¼new/delete æ¯C++çè¿ç®ç¬¦ã对äºéå
é¨æ°æ®ç±»ç对象èè¨ï¼å
ç¨maloc/free æ æ³æ»¡è¶³å¨æ对象çè¦æ±ã对象å¨å建çåæ¶è¦èªå¨æ§è¡æé å½æ°ï¼ 对象æ¶äº¡ä¹åè¦èªå¨æ§è¡ææå½æ°ãç±äºmalloc/free æ¯åºå½æ°èä¸æ¯è¿ç®ç¬¦ï¼ä¸å¨ç¼è¯å¨æ§å¶æéä¹å
ï¼ä¸è½å¤ææ§è¡æé å½æ°åææå½æ°çä»»å¡å¼ºå malloc/freeã
(2)å¨ç¨æ³ä¸ä¹ææä¸åã
å½æ°malloc çååå¦ä¸ï¼
void * malloc(size_t size);
ç¨malloc ç³è¯·ä¸åé¿åº¦ä¸ºlength çæ´æ°ç±»åçå
åï¼ç¨åºå¦ä¸ï¼
int *p = (int *) malloc(sizeof(int) * length);
æ们åºå½æ注æåéä¸å¨ä¸¤ä¸ªè¦ç´ ä¸ï¼âç±»å转æ¢âåâsizeofâã
malloc è¿åå¼çç±»åæ¯void *ï¼æ以å¨è°ç¨malloc æ¶è¦æ¾å¼å°è¿è¡ç±»å转æ¢ï¼å°void * 转æ¢ææéè¦çæéç±»åã
malloc å½æ°æ¬èº«å¹¶ä¸è¯å«è¦ç³è¯·çå
åæ¯ä»ä¹ç±»åï¼å®åªå
³å¿å
åçæ»åèæ°ã
å½æ°free çååå¦ä¸ï¼
void free( void * memblock );
为ä»ä¹free å½æ°ä¸è±¡malloc å½æ°é£æ ·å¤æå¢ï¼è¿æ¯å 为æép çç±»å以åå®ææçå
åç容éäºå
é½æ¯ç¥éçï¼è¯å¥free(p)è½æ£ç¡®å°éæ¾å
åãå¦æp æ¯NULL æéï¼é£ä¹free
对p æ 论æä½å¤å°æ¬¡é½ä¸ä¼åºé®é¢ãå¦æp ä¸æ¯NULL æéï¼é£ä¹free 对pè¿ç»æä½ä¸¤æ¬¡å°±ä¼å¯¼è´ç¨åºè¿è¡é误ã
new/delete ç使ç¨è¦ç¹
è¿ç®ç¬¦new 使ç¨èµ·æ¥è¦æ¯å½æ°malloc ç®åå¾å¤ï¼ä¾å¦ï¼
int *p1 = (int *)malloc(sizeof(int) * length);
int *p2 = new int[length];
è¿æ¯å 为new å
ç½®äºsizeofãç±»å转æ¢åç±»åå®å
¨æ£æ¥åè½ã对äºéå
é¨æ°æ®ç±»åç对象èè¨ï¼new å¨å建å¨æ对象çåæ¶å®æäºåå§åå·¥ä½ãå¦æ对象æå¤ä¸ªæé å½æ°ï¼é£ä¹new çè¯å¥ä¹å¯ä»¥æå¤ç§å½¢å¼ã
å¦æç¨new å建对象æ°ç»ï¼é£ä¹åªè½ä½¿ç¨å¯¹è±¡çæ åæ°æé å½æ°ãä¾å¦
Obj *objects = new Obj[100]; // å建100 个å¨æ对象
ä¸è½åæ
Obj *objects = new Obj[100](1);// å建100 个å¨æ对象çåæ¶èµåå¼1
å¨ç¨delete éæ¾å¯¹è±¡æ°ç»æ¶ï¼çæä¸è¦ä¸¢äºç¬¦å·â[]âãä¾å¦
delete []objects; // æ£ç¡®çç¨æ³
delete objects; // é误çç¨æ³
åè
ç¸å½äºdelete objects[0]ï¼æ¼æäºå¦å¤99 个对象ã
***************************************
1 newèªå¨è®¡ç®éè¦åé
ç空é´ï¼èmallocéè¦æ工计ç®åèæ°
2 newæ¯ç±»åå®å
¨çï¼èmallocä¸æ¯ï¼æ¯å¦ï¼
int* p = new float[2]; // ç¼è¯æ¶æåºé误
int* p = malloc(2*sizeof(float)); // ç¼è¯æ¶æ æ³æåºé误
new operator ç±ä¸¤æ¥ææï¼åå«æ¯ operator new å construct
3 operator new对åºäºmallocï¼ä½operator newå¯ä»¥éè½½ï¼å¯ä»¥èªå®ä¹å
ååé
çç¥ï¼çè³ä¸åå
ååé
ï¼çè³åé
å°éå
å设å¤ä¸ãèmallocæ è½ä¸ºå
4 newå°è°ç¨constructorï¼èmallocä¸è½ï¼deleteå°è°ç¨destructorï¼èfreeä¸è½ã
5 malloc/freeè¦åºæ件æ¯æï¼new/deleteåä¸è¦ã
温馨提示:答案为网友推荐,仅供参考