´ÙÀ½ ÀÌÀü Â÷·Ê

4. C++ Zap (Delete) ¸í·É¾î

C++ ÀÇ delete °ú new ¸í·É¾î´Â "C"ÀÇ malloc °ú free ÇÔ¼öº¸´Ù ÈξÀ ³´´Ù. malloc °ú free ´ë½Å¿¡ new ¿Í zap (delete) ¸í·É¾î¸¦ °¡´ÉÇÑ ¸¹ÀÌ ¾²µµ·Ï ÇÏÀÚ. delete¸í·É¾î¸¦ ´õ È®½ÇÈ÷ »ç¿ëÇϱâ À§Çؼ­ Zap() ¸í·É¾î¸¦ ¸¸µéÀÚ. zap() ¸í·É¾î´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀÇµÉ ¼ö ÀÖ´Ù.


/* 
**¿Ïº®ÇÏ°í Æ°Æ°ÇÑ ¸ÅÅ©·Î¸¦ ¸¸µé±â À§ÇØ do while À» »ç¿ëÇÑ´Ù.
**¿¹¸¦ µé¾î, ¸¸¾à "do-while"À» ¾²Áö ¾ÊÀ¸¸é, ´ÙÀ½°ú °°ÀÌ µÉ
**°ÍÀÌ´Ù  
** if (bbint == 4)
**              aa = 0
** else
**              zap(aptr); //¹®Á¦¹ß»ý! aptrÀÌ Ç×»ó NULL·Î µÉ °ÍÀÌ´Ù
*/

#define zap(x) do { delete(x); x = NULL; } while (0)

ÀÚ ÀÌÁ¦ ¸ðµç Æ÷ÀÎÅ͵éÀÌ ³Î Æ÷ÀÎÅÍ·Î »ý¼ºµÈ´Ù°í °¡Á¤À» ÇÑ´Ù¸é ÀÏ·ÃÀÇ zap() ¸í·É¾î·Î ´ÙÀ½°ú °°ÀÌ new·Î »ý±ä°ÍµéÀ» ¾ÈÀüÇÏ°Ô »èÁ¦ ÇÒ ¼ö ÀÖ°í ¾ÆÁ÷ new·Î »ý±âÁö ¾ÊÀº °ÍµéÀ» Áö¿ìÁö ¾ÊÀ» ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î,
        zap(pFirstname);
        zap(pFirstname); // no core dumps !! Because pFirstname is NULL now
        zap(pFirstname); // no core dumps !! Because pFirstname is NULL now

        zap(pLastname);
        zap(pJobDescription);

ÀÌ°ÍÀº ÀüÇô ½Å±âÇÑ °ÍÀÌ ¾Æ´Ï´Ù. ÀÌ°ÍÀº ´ÜÁö ¹Ýº¹µÇ´Â Äڵ带 ¼¼À̺êÇÏ°í ´õ Àбâ ÁÁ°Ô ¸¸µå´Â °ÍÀÌ´Ù. zap() ¸í·É¾î¿¡¼­ typecast¿¡ ÁýÂøÇÏÁö ¸¶¶ó - ¸¸¾à zap() ¸í·É¾î À§¿¡¼­ ¹º°¡ ¿¡·¯°¡ »ý±â¸é ±×°Ç ¾îµò°¡¿¡¼­ ´Ù¸¥ ¿¡·¯°¡ ÀÖÀ» °¡´É¼ºÀÌ Å©±â ¶§¹®ÀÌ´Ù. ¶ÇÇÑ my_malloc() , my_realloc() ±×¸®°í my_free()´Â ´õ ±ú²ýÇÏ°í additional checksÀÌ Àֱ⶧¹®¿¡ malloc(), realloc() and free(), ´ë½Å¿¡ »ç¿ëµÇ¾î¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î my_malloc() °ú my_free() ÇÔ¼ö¸¦ »ç¿ëÇÑ mychar.h" º¸¶ó. ÁÖÀÇ: 'new' ·Î ÀâÇôÁø ¸Þ¸ð¸®À» free()·Î Ç®°Å³ª ¶Ç´« mallocÀ¸·Î ÀâÇôÁø ¸Þ¸ð¸®¸¦ 'delete' Ç®Áö¸¶¶ó. ÀÌ·Ä °æ¿ì °á°ú¸¦ ¿¹ÃøÇÒ ¼ö ¾ø´Ù.
´ÙÀ½ ÀÌÀü Â÷·Ê