c new
C++ newÓ÷¨Ïà¹Ø¾Ñé×ܽá
×÷Õß: ØýÃû, ¡¡³ö´¦:ITר¼ÒÍø,¡¡ÔðÈαà¼: лåûåû,¡¡2010-04-16 07:00
¡¡¡¡C++ ±à³ÌÓïÑÔÖÐÓÐÒ»ÖÖ½Ð×önewµÄÊõÓï¡£²»¹ýÕâÒ»¸ÅÄîÊDZȽÏÄ£ºýµÄ£¬ÓÐЩÈË°ÑËüÀí½âΪnewº¯Êý£¬µ«ÊÇÓеÄÈËÓÖ»á°ÑËüÀí½âΪnewÔËËã·û¡£ÄÇôËüµÄÕæÕýº¬ÒåÓÖÊÇÈçºÎµÄÄØ?ÔÚÕâÀïÎÒÃǽ«»áͨ¹ý¶ÔC++ newÓ÷¨µÄ½éÉÜ£¬°ïÖú´ó¼ÒÒ»Æð·ÖÎöһϡ£
¡¡¡¡C++ ±à³ÌÓïÑÔÖÐÓÐÒ»ÖÖ½Ð×önewµÄÊõÓï¡£²»¹ýÕâÒ»¸ÅÄîÊDZȽÏÄ£ºýµÄ£¬ÓÐЩÈË°ÑËüÀí½âΪnewº¯Êý£¬µ«ÊÇÓеÄÈËÓÖ»á°ÑËüÀí½âΪnewÔËËã·û¡£ÄÇôËüµÄÕæÕýº¬ÒåÓÖÊÇÈçºÎµÄÄØ?ÔÚÕâÀïÎÒÃǽ«»áͨ¹ý¶ÔC++ newÓ÷¨µÄ½éÉÜ£¬°ïÖú´ó¼ÒÒ»Æð·ÖÎöһϡ£
¡¡¡¡C++ newÓ÷¨Ö®Ò» newÔËËã·û
¡¡¡¡×î³£ÓõÄÊÇ×÷ΪÔËËã·ûµÄnew£¬±ÈÈ磺
¡¡¡¡string *str = new string(¡°test new¡±);
¡¡¡¡×÷ΪÔËËã·û£¬newºÍsizeofÒ»Ñù£¬ÊÇC++ÄÚÖõģ¬Äã²»ÄܶÔËü×öÈκεĸı䣬³ýÁËʹÓÃËü¡£
¡¡¡¡new»áÔÚ¶ÑÉÏ·ÖÅäÒ»¿éÄڴ棬²¢»á×Ô¶¯µ÷ÓÃÀàµÄ¹¹Ô캯Êý¡£
¡¡¡¡C++ newÓ÷¨Ö®¶þ newº¯Êý
¡¡¡¡µÚ¶þÖÖ¾ÍÊÇnewº¯Êý£¬ÆäʵnewÔËËã·ûÄÚ²¿·ÖÅäÄÚ´æʹÓõľÍÊÇnewº¯Êý£¬ÔÐÍÊÇ£º
¡¡void *operator new(size_t size);
¡¡¡¡newº¯Êý·µ»ØµÄÊÇÒ»¸övoidÖ¸Õ룬һ¿éδ¾³õʼ»¯µÄÄÚ´æ¡£ÈçÄãËù¼û£¬ÕâºÍCÓïÑÔµÄmallocÐÐΪÏàËÆ£¬Äã¿ÉÒÔÖØÔØnewº¯Êý£¬²¢ÇÒÔö¼Ó¶îÍâµÄ²ÎÊý£¬µ«ÊDZØÐë±£Ö¤µÚÒ»¸ö²ÎÊý±ØÐëÊÇsize_tÀàÐÍ£¬ËüÖ¸Ã÷ÁË·ÖÅäÄÚ´æ¿éµÄ´óС£¬C++ÔÊÐíÄãÕâô×ö£¬µ±È»Ò»°ãÇé¿öÏÂÕâÊDz»±ØÒªµÄ¡£Èç¹ûÖØÔØÁËnewº¯Êý£¬ÔÚʹÓÃnew²Ù×÷·ûʱµ÷ÓõľÍÊÇÄãÖØÔغóµÄnewº¯ÊýÁË¡£
¡¡¡¡Èç¹ûʹÓÃnewº¯Êý£¬ºÍÓï¾ästring *str = new string(¡°test new¡±)Ïà¶ÔµÄ´úÂë´ó¸ÅÊÇÈçϵÄÑù×Ó£º
¡¡¡¡1.string *str = (string*)operator new(sizeof(string));
¡¡¡¡2.str.string(¡°test new¡±);
¡¡¡¡3.// µ±È»Õâ¸öµ÷ÓÃʱ·Ç·¨µÄ£¬µ«ÊDZàÒëÆ÷ÊÇûÓÐÕâ¸öÏÞÖƵÄ
¡¡¡¡Õ⻹²»ËãÍ꣬»¹ÓеÚÈýÖÖµÄnew´æÔÚ¡£
¡¡¡¡C++ newÓ÷¨Ö®Èý placement new
¡¡¡¡µÚÈýÖÖ£¬placement new£¬ÕâÒ²ÊÇnew×÷Ϊº¯ÊýµÄÒ»ÖÖÓ÷¨£¬ËüÔÊÐíÄãÔÚÒ»¿éÒÑ´æÔÚµÄÄÚ´æÉÏ·ÖÅäÒ»¸ö¶ÔÏ󣬶øÄÚ´æÉϵÄÊý¾Ý²»»á±»¸²¸Ç»òÕß±»ÄãÖ÷¶¯¸Äд£¬placement newͬÑùÓÉnew²Ù×÷·ûµ÷Ó㬵÷ÓøñʽÊÇ£º
¡¡new (buffer) type(size_t size);
¡¡¡¡ÏÈ¿´¿´ÏÂÃæµÄ´úÂ룺
¡¡ 4.char str[22];
¡¡¡¡5.int data = 123;
¡¡¡¡6.int *pa = new (&data) int;
¡¡¡¡7.int *pb = new (str) int(9);
¡¡¡¡½á¹û*pa = 123(δ¸²¸ÇÔÊý¾Ý)£¬¶ø*pb = 9(¸²¸ÇÔÊý¾Ý)£¬¿ÉÒÔ¿´µ½placement
Ïà¹ØÎĵµ£º
ÊÔÌâ5£º±àдһ¸öº¯Êý£¬×÷ÓÃÊÇ°ÑÒ»¸öchar×é³ÉµÄ×Ö·û´®Ñ»·ÓÒÒÆn¸ö¡£±ÈÈçÔÀ´ÊÇ“abcdefghi”Èç¹ûn=2£¬ÒÆλºóÓ¦¸ÃÊÇ“hiabcdefgh”
¡¡¡¡º¯ÊýÍ·ÊÇÕâÑùµÄ£º
//pStrÊÇÖ¸ÏòÒÔ'\0'½áβµÄ×Ö·û´®µÄÖ¸Õë
//stepsÊÇÒªÇóÒƶ¯µÄn
void LoopMove ( char * pStr, int steps )
{
¡¡//ÇëÌî³ä...
}
¡¡¡¡½ ......
µÚ¶þÕ Êý¾ÝÀàÐÍ
Ò»¡¢Êý¾ÝÀàÐÍ·ÖÀà
1 ÁªºÏÀàÐÍ
2 º¯ÊýÀàÐÍ
3 ÊýÁ¿ÀàÐÍ
3.1ËãÊõÀàÐÍ
¢Ù »ù±¾Êý¾ÝÀàÐÍ
ÕûÐÍ£¨°üÀ¨char£©
¸¡µãÐÍ ......
µÚ¶þÕ Õ÷·þ¿É²âÐÔÄÑÌâ
2.1 ¿É²âÐÔÎÊÌâÏê½â£¨1£©
µ¥Ôª²âÊÔЧÒæÌرð¸ß£¬·½·¨Ò²ºÜ¼òµ¥£¬µ«È´³¢ÊÔµÄÆóÒµºÜ¶à£¬³É¹¦ÊµÊ©µÄÆóÒµºÜÉÙ£¬ÎªÊ²Ã´ÄØ£¿Ö÷ÒªÔÒò¾ÍÊÇÄÑÓÚÍ»ÆƿɲâÐÔÎÊÌâ¡£“¿É²â”Õâ¸ö´Ê£¬Òâ˼ÒѾºÜÃ÷°×ÁË£¬Èç¹û²»“¿É²â”µÄ»°£¬ÄǾÍÊDz»Äܲ⣬û·¨²â£¬¾ÍÊÇ× ......
googletest C/C++ ²âÊÔ¿ò¼Ü·Ç³£ºÃÓ㬽éÉܼ°ÏÂÔØÇë¿´ http://code.google.com/p/googletest/
//============================================================================
// ʹÓà googletest ²âÊÔ¿ò¼Ü
//============================================================================
// Returns n! ......
/*
×¢Òâ²»¶ÏÓÒÒÆÅжÏ×îµÍλÊÇ1ÓжàÉÙ¸öµÄËã·¨ÊÇ´íÎóµÄ£¬
ÒòΪ¸ù¾ÝGNU C/C++µÄʵÏÖÀ´¿´£¬¸ºÊýÊÇ´ø·ûºÅÌî³ä½øÐÐÓÒÒƵģ¬ËùÒÔÈç¹ûÊǸºÊý£¬¸ÃËã·¨»áËÀÑ»·¡£
±äͨ°ì·¨£ºJava¿ÉÒÔÓÃ>>>Âß¼ÓÒÒÆλ²Ù×÷·û£¬C/C++¿ÉÒÔÇ¿ÖÆת»»³ÉÎÞ·ûºÅÕûÊýÔÙ´¦Àí
ÏÂÃæµÄ³ÌÐòÊÇÕý½â¡£ÆäÖÐnum &= (num - 1) »áÏû³ýnumµÄ×îСλÖõÄ"1" ......