¸Þ¸ð¸®¸¦ µ¿ÀûÀ¸·Î ÇÒ´çÇÏ°í °´Ã¼¸¦ ÃʱâÈÇÏ´Â new, deleteµµ ¿¬»êÀÚÀÇ ÀÏÁ¾À̹ǷΠ¿À¹ö·ÎµùÇÒ ¼ö ÀÖ´Ù. °´Ã¼¸¦ Èü¿¡ ÇÒ´çÇÏ´Â new ¿¬»êÀÚ´Â µÎ °¡Áö µ¿ÀÛÀ» Çϴµ¥ ¿ì¼± ¿î¿µÃ¼Á¦ÀÇ Èü °ü¸® ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¿äûÇѸ¸Å ¸Þ¸ð¸®¸¦ ÇÒ´çÇϰí ÀÌ ÇÒ´çµÈ ¸Þ¸ð¸®¿¡ ´ëÇØ °´Ã¼ÀÇ »ý¼ºÀÚ¸¦ È£ÃâÇÏ¿© ÃʱâÈÇÑ´Ù. new°¡ »ý¼ºÀÚ¸¦ È£ÃâÇÏ´Â °ÍÀº ¾ð¾îÀÇ °íÀ¯ÇÑ ±â´ÉÀ̹ǷΠ»ç¿ëÀÚ°¡ »ý¼ºÀÚ È£ÃâÀ» ±ÝÁöÇѴٰųª ÇÒ ¼ö ¾øÁö¸¸ °´Ã¼¸¦ À§ÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ´Â ¹æ½ÄÀº ¿øÇϴ´ë·Î º¯°æÇÒ ¼ö ÀÖ´Ù. Áï new ¿¬»êÀÚ ÀÚü´Â ¿À¹ö·Îµù ´ë»óÀÌ ¾Æ´ÏÁö¸¸ ÀÌ ÇÔ¼ö°¡ ³»ºÎÀûÀ¸·Î È£ÃâÇÏ´Â operator new´Â ¿À¹ö·Îµù ´ë»óÀÌ´Ù.
new¿¬»êÀÚ´Â ¸Þ¸ð¸® ÇÒ´çÀ» À§ÇØ operator new¸¦ È£ÃâÇϴµ¥ ÀÌ ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇÏ¸é °´Ã¼¸¦ À§ÇÑ ¸Þ¸ð¸®¸¦ Á÷Á¢ ÇÒ´ç ¶Ç´Â ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. new¿Í ¸¶Âù°¡Áö·Î delete ÇÔ¼öµµ µÎ °¡Áö µ¿ÀÛÀ» Çϴµ¥ ÆÄ±«ÀÚ¸¦ ¸ÕÀú È£ÃâÇÏ¿© °´Ã¼¸¦ Á¤¸®ÇÏ°í ´ÙÀ½À¸·Î operator delete¸¦ È£ÃâÇÏ¿© °´Ã¼°¡ »ç¿ëÇÏ´ø ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÑ´Ù. operator new¸¦ ¿À¹ö·ÎµùÇØ¼ ÇÒ´ç ¹æ½ÄÀ» ¹Ù²Ù¾ú´Ù¸é ´ç¿¬È÷ operator deleteµµ ¿À¹ö·ÎµùÇØ¼ ÇØÁ¦ÇÏ´Â ¹æ½Äµµ ÇÒ´ç µ¿ÀÛ¿¡ ¸Â°Ô ¹Ù²ã¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ´ë·®ÀÇ ¸Þ¸ð¸®¸¦ È¿À²ÀûÀ¸·Î °ü¸®Çϱâ À§ÇØ °¡»ó ¸Þ¸ð¸®¸¦ Á÷Á¢ ´Ù·ç°í ½Í´Ù°Å³ª ¹Ì¸® ÇÒ´çÇØ ³õÀº ¸Þ¸ð¸® Ç®À» Á¶±Ý¾¿ µ¹·Á °¡¸ç »ç¿ëÇÏ°í ½ÍÀ» ¶§°¡ ÀÌ·± °æ¿ì¿¡ ÇØ´çÇÑ´Ù.
Win32ÀÇ °¡»ó ¸Þ¸ð¸®´Â ¿¹¾à°ú È®Á¤À̶ó´Â µÎ ´Ü°èÀÇ ¸Þ¸ð¸® ÇÒ´ç ¹æ½ÄÀÌ ÀÖ°í °¢°¢ÀÇ ¸Þ¸ð¸® ÆäÀÌÁö¿¡ ´ëÇØ Àбâ, ¾²±â ±ÇÇÑÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ¾î ÇÒ´ç ¼Óµµ°¡ ºü¸£°í ¾ÈÀü¼ºÀÌ ³ô¾Æ Á÷Á¢ °ü¸®ÇÒ °æ¿ì ÈüÀ» ¾²´Â °Íº¸´Ù ´õ È¿À²ÀûÀÌ´Ù. ƯÈ÷ °´Ã¼ÀÇ Å©±â°¡ Ŭ ¶§ È¿°úÀûÀÌ´Ù. ¶ÇÇÑ ÇÒ´ç, ÇØÁ¦°¡ ¾ÆÁÖ ºó¹øÇÏ´Ù¸é ÃæºÐÇÑ Å©±âÀÇ ¸Þ¸ð¸® Å¥¸¦ ¸¸µé°í ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¸Þ¸ð¸®¸¦ ȸÀü½ÃŰ´Â ¹æ¹ýµµ ¾µ ¼ö ÀÖ´Ù. Èü ÇÒ´çÀº ¸Å ÇÒ´çºÐ¸¶´Ù ¾ó¸¶¸¸ÅÀÇ ¸Þ¸ð¸®°¡ ÇÒ´çµÇ¾ú´ÂÁö¸¦ ±â¾ïÇÏ´Â Çì´õ¸¦ ÀÛ¼ºÇϴµ¥ ÀÌ Çì´õ¿¡ ÀÇÇÑ ¸Þ¸ð¸® ³¶ºñ°¡ ½ÉÇÏ¸ç ¶ÇÇÑ ÀæÀº ÇÒ´ç ÇØÁ¦¿¡ ÀÇÇØ ´ÜÆíÈ ¹®Á¦°¡ ¹ß»ýÇϴµ¥ ÇÒ´ç ¹æ½ÄÀ» ¹Ù²ÞÀ¸·Î½á ÀÌ·± ¹®Á¦µéÀ» Àû±ØÀûÀ¸·Î ÇØ°áÇÒ ¼ö ÀÖ´Ù.
¹°·Ð ÀÌ·± °æ¿ì´Â ¾îµð±îÁö³ª ¿¹¿¡ ºÒ°úÇϸç Çö½ÇÀûÀÎ ½Ç¿ë¼ºÀº ±×¸® ³ôÁö ¾ÊÀº ÆíÀε¥ ¹°¸®ÀûÀÎ ¸Þ¸ð¸®¾çÀÌ ÃæºÐÇØÁ³À» »Ó¸¸ ¾Æ´Ï¶ó ¿î¿µÃ¼Á¦ÀÇ ¸Þ¸ð¸® °ü¸® ´É·ÂÀÌ ¶Ù¾î³ª±â ¶§¹®¿¡ ÀÌ·¸°Ô±îÁö ¸Þ¸ð¸®¸¦ Á÷Á¢ °ü¸®ÇØ¾ß ÇÒ ÇÊ¿ä´Â ¸¹ÀÌ °¨¼ÒµÇ¾ú´Ù. ÇÏÁö¸¸ ¸Þ¸ð¸®¶õ ¾Æ¹«¸® ¸¹¾Æµµ ¾Æ²¸ ½á¾ß ÇÏ´Â °ÍÀ̹ǷΠ¾ÆÁ÷µµ ´ë¿ë·®ÀÇ ¸¹Àº ¸Þ¸ð¸®¸¦ ´Ù·ç´Â ÇÁ·Î±×·¥Àº ÀÌ ±â¹ýÀÌ ²À ÇÊ¿äÇÏ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ ÅëÇØ Àü¿ª new, delete ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇØ º¸ÀÚ.
|
¿¹ Á¦ : newOverload |
#include <Turboc.h>
void *operator new(size_t t)
{
return malloc(t);
}
void operator delete(void *p)
{
free(p);
}
void main()
{
int *pi=new int;
*pi=1234;
printf("%d\n",*pi);
delete pi;
}
operator new ´Â size_tÇü Àμö¿Í ±× ¿Ü ÇÒ´ç¿¡ ÇÊ¿äÇÑ Àμö¸¦ Àü´Þ¹Þ¾Æ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ¸ç ±× °á°ú »õ·Î ÇÒ´çÇÑ ¸Þ¸ð¸®ÀÇ ¹øÁö¸¦ void *ŸÀÔÀ¸·Î ¸®ÅÏÇÑ´Ù. ´Ü¼øÈ÷ ¸Þ¸ð¸®¸¸ ÇÒ´çÇÒ »ÓÀ̹ǷΠ¾ÆÁ÷ ÀÌ ¸Þ¸ð¸®ÀÇ Å¸ÀÔÀº ¾Ë ¼ö ¾øÀ¸¸ç ±×·¡¼ void *¸¦ ¸®ÅÏÇÒ ¼ö¹Û¿¡ ¾ø´Ù. ÇÒ´çÀÇ ¹æ½ÄÀº ¸¶À½´ë·Î ¼±ÅÃÇÒ ¼ö ÀÖ°í ÇÒ´ç ¹æ½ÄÀ» ÁöÁ¤ÇÏ´Â Ãß°¡ Àμöµµ ¾ó¸¶µçÁö ¹ÞÀ» ¼ö ÀÖµÇ ´Ü ù ¹øÂ° Àμö´Â ¹Ýµå½Ã ÇÒ´ç Å©±â¸¦ ÁöÁ¤ÇÏ´Â size_t¿©¾ß ÇÑ´Ù. operator delete ´Â void *¸¦ Àμö·Î ¹Þ¾Æ ÀÌ ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÏ¸ç ¸®ÅϰªÀº ¾ø´Ù.
¿¹Á¦¿¡¼´Â new, delete¸¦ °¢°¢ ¿À¹ö·ÎµùÇØ ³õ°í main¿¡¼ Á¤¼öÇü º¯¼ö Çϳª¸¦ ÀúÀåÇÒ¸¸ÅÀÎ 4¹ÙÀÌÆ®¸¦ ÇÒ´çÇØ º¸¾Ò´Ù. ¿À¹ö·Îµù °¡´ÉÇÏ´Ù´Â °Í¸¸ È®ÀÎÇϱâ À§ÇØ malloc, free¸¦ »ç¿ëÇߴµ¥ ¹Ì¸® ÇÒ´çÇÑ ¸Þ¸ð¸®ÀÇ Á¶°¢À» ¶¼ Áְųª ´Ù¸¥ ¸Þ¸ð¸® ÇÒ´ç ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. new, delete ÇÔ¼ö¿¡ Áß´ÜÁ¡À» ¼³Á¤ÇØ ³õ°í Å×½ºÆ®Çغ¸¸é ÇÒ´ç, ÇØÁ¦ÇÒ ¶§ ÀÌ ÇÔ¼ö°¡ È£ÃâµÇ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÀÌ ¿¹Á¦´Â VC 6.0¿¡¼´Â ÄÄÆÄÀϵÇÁö ¾ÊÀ¸¸ç VC 7.0 ÀÌ»ó, Dev-C++¿¡¼´Â Àß ÄÄÆÄÀϵȴÙ.
°´Ã¼ÀÇ ¹è¿À» ÇÒ´ç ¹× ÇØÁ¦ÇÏ´Â new [], delete [] µµ ¹°·Ð ¿À¹ö·ÎµùÇÒ ¼ö ÀÖ´Ù. ÀÌ ¿¹Á¦Ã³·³ new, delete¸¦ Àü¿ª ¿¬»êÀÚ·Î ¿À¹ö·ÎµùÇÒ ¼öµµ ÀÖ°í Æ¯Á¤ Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö·Î ¿À¹ö·ÎµùÇÏ¿© ƯÁ¤ Ŭ·¡½º¿¡ ´ëÇØ¼¸¸ ÇÒ´ç ¹æ½ÄÀ» º¯°æÇÒ ¼öµµ ÀÖ´Ù. ¹®¹ýÀÇ º¹À⼺¿¡ ºñÇØ ½Ç¿ë¼ºÀº ´Ù¼Ò ¶³¾îÁö¹Ç·Î ÀÌ ¹æ¹ý¿¡ ´ëÇÑ »ó¼¼ÇÑ ¼³¸íÀº »ý·«Çϱâ·Î ÇÑ´Ù. ÀÌ·± ¸Þ¸ð¸® ÇÒ´ç ±â¹ýÀ» Á¤È®ÇÏ°Ô ±¸»çÇϱâ À§Çؼ´Â ¿¬»êÀÚ ¿À¹ö·Îµù ÀÚü¿¡ ´ëÇÑ ÀÌÇØº¸´Ù´Â ¸Þ¸ð¸® ±¸Á¶³ª °ü¸® ±â¹ý¿¡ ´ëÇÑ ÀÌÇØ°¡ ´õ ¸¹ÀÌ ÇÊ¿äÇÏ´Ù.