newºÍdelete²Ù×÷·ûÎÒÃÇÓ¦¸Ã¶¼Óùý£¬ËüÃÇÊǶԶÑÖеÄÄÚ´æ½øÐÐÉêÇëºÍÊÍ·Å£¬¶øÕâÁ½¸ö¶¼ÊDz»Äܱ»ÖØÔصġ£ÒªÊµÏÖ²»Í¬µÄÄÚ´æ·ÖÅäÐÐΪ£¬ÐèÒªÖØÔØoperator new£¬¶ø²»ÊÇnewºÍdelete¡£
¿´ÈçÏ´úÂ룺
class MyClass {…};
MyClass * p=new MyClass;
ÕâÀïµÄnewʵ¼ÊÉÏÊÇÖ´ÐÐÈçÏÂ3¸ö¹ý³Ì£º
1µ÷ÓÃoperator new·ÖÅäÄڴ棻
2µ÷Óù¹Ô캯ÊýÉú³ÉÀà¶ÔÏó£»
3·µ»ØÏàÓ¦Ö¸Õë¡£
operator new¾ÍÏñoperator+Ò»Ñù£¬ÊÇ¿ÉÒÔÖØÔØµÄ£¬µ«ÊDz»ÄÜÔÚÈ«¾Ö¶ÔÔÐÍΪvoid operator new(size_t size)Õâ¸öÔÐͽøÐÐÖØÔØ£¬Ò»°ãÖ»ÄÜÔÚÀàÖнøÐÐÖØÔØ¡£Èç¹ûÀàÖÐûÓÐÖØÔØoperator new£¬ÄÇôµ÷ÓõľÍÊÇÈ«¾ÖµÄ::operator newÀ´Íê³É¶ÑµÄ·ÖÅ䡣ͬÀí£¬operator new[]¡¢operator delete¡¢operator delete[]Ò²ÊÇ¿ÉÒÔÖØÔØµÄ£¬Ò»°ãÄãÖØÔØÁËÆäÖÐÒ»¸ö£¬ÄÇô×îºÃ°ÑÆäÓàÈý¸ö¶¼ÖØÔØÒ»±é¡£
placement newÊÇoperator newµÄÒ»¸öÖØÔØ°æ±¾£¬Ö»ÊÇÎÒÃǺÜÉÙÓõ½Ëü¡£Èç¹ûÄãÏëÔÚÒѾ·ÖÅäµÄÄÚ´æÖд´½¨Ò»¸ö¶ÔÏó£¬Ê¹ÓÃnewÊDz»Ðеġ£Ò²¾ÍÊÇ˵placement newÔÊÐíÄãÔÚÒ»¸öÒѾ·ÖÅäºÃµÄÄÚ´æÖУ¨Õ»»ò¶ÑÖУ©¹¹ÔìÒ»¸öеĶÔÏó¡£ÔÐÍÖÐvoid*pʵ¼ÊÉϾÍÊÇÖ¸ÏòÒ»¸öÒѾ·ÖÅäºÃµÄÄڴ滺³åÇøµÄµÄÊ×µØÖ·¡£
ÎÒÃÇÖªµÀʹÓÃnew²Ù×÷·û·ÖÅäÄÚ´æÐèÒªÔÚ¶ÑÖвéÕÒ×ã¹»´óµÄÊ£Óà¿Õ¼ä£¬Õâ¸ö²Ù×÷ËÙ¶ÈÊǺÜÂýµÄ£¬¶øÇÒÓпÉÄܳöÏÖÎÞ·¨·ÖÅäÄÚ´æµÄÒì³££¨¿Õ¼ä²»¹»£©¡£placement new¾Í¿ÉÒÔ½â¾öÕâ¸öÎÊÌâ¡£ÎÒÃǹ¹Ôì¶ÔÏó¶¼ÊÇÔÚÒ»¸öÔ¤ÏÈ×¼±¸ºÃÁ˵ÄÄڴ滺³åÇøÖнøÐУ¬²»ÐèÒª²éÕÒÄڴ棬ÄÚ´æ·ÖÅäµÄʱ¼äÊdz£Êý£»¶øÇÒ²»»á³öÏÖÔÚ³ÌÐòÔËÐÐÖÐ;³öÏÖÄÚ´æ²»×ãµÄÒì³£¡£ËùÒÔ£¬placement new·Ç³£ÊʺÏÄÇЩ¶Ôʱ¼äÒªÇó±È½Ï¸ß£¬³¤Ê±¼äÔËÐв»Ï£Íû±»´ò¶ÏµÄÓ¦ÓóÌÐò¡£
ʹÓ÷½·¨ÈçÏ£º
1. »º³åÇøÌáǰ·ÖÅä
¿ÉÒÔʹÓöѵĿռ䣬Ҳ¿ÉÒÔʹÓÃÕ»µÄ¿Õ¼ä£¬ËùÒÔ·ÖÅ䷽ʽÓÐÈçÏÂÁ½ÖÖ£º
class MyClass {…};
char *buf=new char[N*sizeof(MyClass)+ sizeof(int) ] ; »òÕßchar buf[N*sizeof(MyClass)+ sizeof(int) ];
2. ¶ÔÏóµÄ¹¹Ôì
MyClass * pClass=new(buf) MyClass;
3. ¶ÔÏóµÄÏú»Ù
Ò»µ©Õâ¸ö¶ÔÏóʹÓÃÍê±Ï£¬Äã±ØÐëÏÔʽµÄµ÷ÓÃÀàµÄÎö¹¹º¯Êý½øÐÐÏú»Ù¶ÔÏó¡£µ«´ËʱÄÚ´æ¿Õ¼ä²»»á±»ÊÍ·Å£¬ÒÔ±ãÆäËûµÄ¶ÔÏóµÄ¹¹Ôì¡£
pClass->~MyClass();
4. ÄÚ´æµÄÊÍ·Å
Èç¹û»º³åÇøÔÚ¶ÑÖУ¬ÄÇôµ÷ÓÃdelete[] buf;½øÐÐÄÚ´æµÄÊÍ·Å£»Èç¹ûÔÚÕ»ÖУ¬ÄÇôÔÚÆä×÷ÓÃÓòÄÚÓÐЧ£¬Ìø³ö×÷ÓÃÓò£¬ÄÚ´æ×Ô¶¯ÊÍ·Å¡£