ï»?!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ‹¹…è°ˆ C++ 中的 new/delete å’?new[]/delete[]-‹¹Žå—软äšg开发|å±×ƒ¸œè½¯äšg开å?‹¹Žå—èµ¢å¯d¿U‘技软äšg开发公å?/title> <meta name="keywords" content="‹¹…è°ˆ C++ 中的 new/delete å’?new[]/delete[]"/> <meta name="description" content="在C++中,你也许经å¸æ€‹É用new和delete来动态申请和释放内存åQŒä½†ä½ å¯æ›¾æƒ³˜q‡ä»¥ä¸‹é—®é¢˜å‘¢åQŸnew和delete是函数吗åQŸnew又是什么?什么时候用它们åQŸä½ çŸ¥é“operatornew和operatordelete吗?ä¸ÞZ»€ä¹ˆnew(size_t);  //allocateanarrayvoi"/> <link href="/css/style.css" rel="stylesheet" type="text/css" /> <meta http-equiv="Cache-Control" content="no-transform" /> <meta http-equiv="Cache-Control" content="no-siteapp" /> </head> <body> <div style="position:fixed;left:-9000px;top:-9000px;"><wbr id="vebt5"><option id="vebt5"><var id="vebt5"><p id="vebt5"></p></var></option></wbr><listing id="vebt5"><object id="vebt5"><nobr id="vebt5"></nobr></object></listing><ol id="vebt5"></ol><pre id="vebt5"><em id="vebt5"><input id="vebt5"></input></em></pre><form id="vebt5"><big id="vebt5"><li id="vebt5"></li></big></form><pre id="vebt5"><em id="vebt5"><kbd id="vebt5"><label id="vebt5"></label></kbd></em></pre><mark id="vebt5"></mark><legend id="vebt5"></legend><noscript id="vebt5"></noscript><div id="vebt5"></div><center id="vebt5"><small id="vebt5"><track id="vebt5"><rp id="vebt5"></rp></track></small></center><tr id="vebt5"><option id="vebt5"><acronym id="vebt5"></acronym></option></tr><track id="vebt5"></track><tt id="vebt5"></tt><track id="vebt5"><form id="vebt5"><pre id="vebt5"><em id="vebt5"></em></pre></form></track><wbr id="vebt5"></wbr><nav id="vebt5"><blockquote id="vebt5"><dd id="vebt5"></dd></blockquote></nav><noscript id="vebt5"></noscript><mark id="vebt5"></mark><div id="vebt5"><menuitem id="vebt5"><wbr id="vebt5"></wbr></menuitem></div><menu id="vebt5"><samp id="vebt5"><meter id="vebt5"><dfn id="vebt5"></dfn></meter></samp></menu><kbd id="vebt5"></kbd><track id="vebt5"><form id="vebt5"><source id="vebt5"></source></form></track><u id="vebt5"></u><var id="vebt5"><cite id="vebt5"><div id="vebt5"></div></cite></var><track id="vebt5"><form id="vebt5"><u id="vebt5"></u></form></track><option id="vebt5"></option><samp id="vebt5"></samp><address id="vebt5"></address><samp id="vebt5"></samp><noframes id="vebt5"></noframes><strong id="vebt5"></strong><progress id="vebt5"><kbd id="vebt5"><div id="vebt5"></div></kbd></progress><s id="vebt5"></s><ins id="vebt5"></ins><table id="vebt5"><strong id="vebt5"><noframes id="vebt5"></noframes></strong></table><listing id="vebt5"></listing><bdo id="vebt5"><nav id="vebt5"><table id="vebt5"><span id="vebt5"></span></table></nav></bdo><samp id="vebt5"></samp><strike id="vebt5"><video id="vebt5"><samp id="vebt5"></samp></video></strike><ruby id="vebt5"></ruby><optgroup id="vebt5"></optgroup><option id="vebt5"><wbr id="vebt5"><p id="vebt5"><rp id="vebt5"></rp></p></wbr></option><sup id="vebt5"><acronym id="vebt5"><tt id="vebt5"><dfn id="vebt5"></dfn></tt></acronym></sup><progress id="vebt5"></progress><tbody id="vebt5"><table id="vebt5"><legend id="vebt5"><dl id="vebt5"></dl></legend></table></tbody><ins id="vebt5"></ins><code id="vebt5"><menu id="vebt5"><sub id="vebt5"><meter id="vebt5"></meter></sub></menu></code><listing id="vebt5"><div id="vebt5"><center id="vebt5"><wbr id="vebt5"></wbr></center></div></listing><dfn id="vebt5"></dfn> <table id="vebt5"><span id="vebt5"><dl id="vebt5"><object id="vebt5"></object></dl></span></table><form id="vebt5"><code id="vebt5"><em id="vebt5"></em></code></form><xmp id="vebt5"></xmp><cite id="vebt5"><div id="vebt5"><code id="vebt5"><em id="vebt5"></em></code></div></cite><address id="vebt5"></address><meter id="vebt5"><source id="vebt5"><table id="vebt5"><ruby id="vebt5"></ruby></table></source></meter><dfn id="vebt5"><option id="vebt5"><dd id="vebt5"><p id="vebt5"></p></dd></option></dfn><strike id="vebt5"></strike><b id="vebt5"></b><kbd id="vebt5"></kbd><sup id="vebt5"><acronym id="vebt5"><delect id="vebt5"><b id="vebt5"></b></delect></acronym></sup><cite id="vebt5"><xmp id="vebt5"><center id="vebt5"><small id="vebt5"></small></center></xmp></cite><optgroup id="vebt5"><xmp id="vebt5"><center id="vebt5"></center></xmp></optgroup><ol id="vebt5"></ol><u id="vebt5"><s id="vebt5"><cite id="vebt5"><ins id="vebt5"></ins></cite></s></u><rp id="vebt5"></rp><dl id="vebt5"></dl><em id="vebt5"></em><big id="vebt5"></big><code id="vebt5"><i id="vebt5"><optgroup id="vebt5"></optgroup></i></code><rp id="vebt5"><big id="vebt5"><s id="vebt5"></s></big></rp><track id="vebt5"><form id="vebt5"><u id="vebt5"></u></form></track><dd id="vebt5"><bdo id="vebt5"><tbody id="vebt5"><table id="vebt5"></table></tbody></bdo></dd><dl id="vebt5"></dl><tr id="vebt5"><option id="vebt5"><acronym id="vebt5"></acronym></option></tr><pre id="vebt5"></pre><center id="vebt5"><small id="vebt5"><track id="vebt5"><rp id="vebt5"></rp></track></small></center><video id="vebt5"></video><dfn id="vebt5"></dfn><dd id="vebt5"><bdo id="vebt5"><th id="vebt5"><address id="vebt5"></address></th></bdo></dd><cite id="vebt5"></cite><center id="vebt5"><small id="vebt5"><noscript id="vebt5"></noscript></small></center><meter id="vebt5"></meter><strong id="vebt5"><input id="vebt5"><th id="vebt5"></th></input></strong><nobr id="vebt5"></nobr><dfn id="vebt5"><font id="vebt5"><dd id="vebt5"></dd></font></dfn><dd id="vebt5"><bdo id="vebt5"><tbody id="vebt5"><video id="vebt5"></video></tbody></bdo></dd><mark id="vebt5"><bdo id="vebt5"><b id="vebt5"><table id="vebt5"></table></b></bdo></mark><output id="vebt5"><ol id="vebt5"><bdo id="vebt5"></bdo></ol></output><strong id="vebt5"><track id="vebt5"><nav id="vebt5"><pre id="vebt5"></pre></nav></track></strong><thead id="vebt5"></thead><mark id="vebt5"><td id="vebt5"><tbody id="vebt5"><video id="vebt5"></video></tbody></td></mark><p id="vebt5"></p><ins id="vebt5"></ins><form id="vebt5"></form><span id="vebt5"><tt id="vebt5"><object id="vebt5"><font id="vebt5"></font></object></tt></span><delect id="vebt5"><tbody id="vebt5"><table id="vebt5"><legend id="vebt5"></legend></table></tbody></delect><optgroup id="vebt5"></optgroup><tbody id="vebt5"><table id="vebt5"><legend id="vebt5"></legend></table></tbody><big id="vebt5"></big> <ruby id="vebt5"></ruby><bdo id="vebt5"><tbody id="vebt5"><table id="vebt5"><span id="vebt5"></span></table></tbody></bdo><b id="vebt5"><output id="vebt5"><dd id="vebt5"></dd></output></b><listing id="vebt5"><ins id="vebt5"><center id="vebt5"></center></ins></listing><table id="vebt5"><strong id="vebt5"><noframes id="vebt5"><th id="vebt5"></th></noframes></strong></table><em id="vebt5"></em><strike id="vebt5"><menu id="vebt5"><samp id="vebt5"><meter id="vebt5"></meter></samp></menu></strike><i id="vebt5"><span id="vebt5"><tt id="vebt5"></tt></span></i><pre id="vebt5"><strong id="vebt5"><input id="vebt5"><thead id="vebt5"></thead></input></strong></pre><ins id="vebt5"></ins><nobr id="vebt5"><sub id="vebt5"><button id="vebt5"></button></sub></nobr><acronym id="vebt5"><tt id="vebt5"><dfn id="vebt5"><font id="vebt5"></font></dfn></tt></acronym><nobr id="vebt5"><mark id="vebt5"><td id="vebt5"><dfn id="vebt5"></dfn></td></mark></nobr><track id="vebt5"></track><dl id="vebt5"><code id="vebt5"><sup id="vebt5"><sub id="vebt5"></sub></sup></code></dl><del id="vebt5"></del><track id="vebt5"></track><video id="vebt5"></video><ol id="vebt5"></ol><track id="vebt5"></track><th id="vebt5"><menuitem id="vebt5"><wbr id="vebt5"><listing id="vebt5"></listing></wbr></menuitem></th><del id="vebt5"></del><sub id="vebt5"></sub><big id="vebt5"></big><b id="vebt5"></b><address id="vebt5"><progress id="vebt5"><noscript id="vebt5"></noscript></progress></address><del id="vebt5"><i id="vebt5"><optgroup id="vebt5"></optgroup></i></del><delect id="vebt5"></delect><dl id="vebt5"></dl><li id="vebt5"></li><tr id="vebt5"><option id="vebt5"><ol id="vebt5"><delect id="vebt5"></delect></ol></option></tr><th id="vebt5"><address id="vebt5"><wbr id="vebt5"><rt id="vebt5"></rt></wbr></address></th><strike id="vebt5"></strike><strike id="vebt5"></strike><noscript id="vebt5"></noscript><p id="vebt5"></p><dl id="vebt5"></dl><progress id="vebt5"><rt id="vebt5"><th id="vebt5"></th></rt></progress><tt id="vebt5"><object id="vebt5"><menu id="vebt5"><sub id="vebt5"></sub></menu></object></tt><menu id="vebt5"></menu><span id="vebt5"><noframes id="vebt5"><tr id="vebt5"></tr></noframes></span><form id="vebt5"></form><video id="vebt5"><span id="vebt5"><tt id="vebt5"></tt></span></video><b id="vebt5"></b><video id="vebt5"></video><center id="vebt5"><small id="vebt5"><noscript id="vebt5"><div id="vebt5"></div></noscript></small></center><cite id="vebt5"><xmp id="vebt5"><code id="vebt5"><small id="vebt5"></small></code></xmp></cite><pre id="vebt5"></pre><i id="vebt5"><ruby id="vebt5"><tt id="vebt5"></tt></ruby></i><font id="vebt5"><mark id="vebt5"><td id="vebt5"></td></mark></font></div> <div class="head"> <div class="top"><span><a href="/html/sitemap.xml">XML</a> | <a href="/html/sitemap.html">HTML</a> | <a href="/sitemap.txt">TXT</a></span></div> <div class="bank"> <div class="logo"> <h1><strong><a href="http://www.cabanatime.com" style="margin-right:10px">‹¹Žå—软äšg开å?/a></strong><strong><a href="http://www.cabanatime.com">å±×ƒ¸œè½¯äšg开å?/a></strong></h1> </div> <div class="contact-top"></div> </div> <div class="menu"> <ul> <li><a href="/">é¦?#160;   ™å?/a></li> <li><a href="/About/">关于我们</a></li> <li><a href="/Advantage/">开发优åŠ?/a></li> <li><a href="/Products/">产品展示</a></li> <li><a href="/Cooperation/">合作企业</a></li> <li><a href="/News/">新闻动æ€?/a></li> <li><a href="/Contact/">联系我们</a></li> </ul> </div> <div class="banner"><img src="/images/banner.jpg" width="1000" height="341"/></div> </div> <div id="position"><div>您当前位¾|®ï¼š<a href="/">软äšg开å?/a> >> <a href="/News/">新闻动æ€?/a> >> <a href="/News/Industry/">软äšg开发行业资è®?/a> >> ‹¹è§ˆæ–‡ç« </div></div> <div class="youshi_f1" id="youshi_tdyx"> <div class="youshi01"> <h1 class="article_title">‹¹…è°ˆ C++ 中的 new/delete å’?new[]/delete[]</h1> <div class="article_author">æ·ÕdŠ æ—‰™—´åQ?016-11-8 15:21:50 文章作者:<a href="/">‹¹Žå—软äšg开å?/a> ‹¹è§ˆ‹Æ¡æ•°åQ?Script Language="Javascript" Src="/item/GetHits.asp?Action=Count&GetFlag=0&m=1&ID=2920"></Script></div> <div class="article_main"><div id="MyContent"><p><span style="font-size: 14px;">  åœ?C++ 中,你也许经å¸æ€‹Éç”?new å’?delete 来动态申请和释放内存åQŒä½†ä½ å¯æ›¾æƒ³˜q‡ä»¥ä¸‹é—®é¢˜å‘¢åQ?/span></p><p><span style="font-size: 14px;">  new å’?delete 是函数吗åQ?/span></p><p><span style="font-size: 14px;">  new [] å’?delete [] 又是什么?什么时候用它们åQ?/span></p><p><span style="font-size: 14px;">  你知é?operator new å’?operator delete 吗?</span></p><p><span style="font-size: 14px;">  ä¸ÞZ»€ä¹?new [] 出来的数¾l„有时可以用 delete 释放有时又不行?</span></p><p><span style="font-size: 14px;">  â€?/span></p><p><span style="font-size: 14px;">  如果你对˜q™äº›é—®é¢˜éƒ½æœ‰ç–‘问的话åQŒä¸å¦¨çœ‹çœ‹æˆ‘˜q™ç¯‡æ–‡ç« ã€?/span></p><p><span style="font-size: 14px;">  new å’?delete 到底是什么?</span></p><p><span style="font-size: 14px;">  如果扑ַ¥ä½œçš„同学看一些面试的书,我相信都会遇到这æ ïLš„题:sizeof 不是函数åQŒç„¶åŽä‹Då‡ÞZ¸€å †çš„理由来证æ˜?sizeof 不是函数。在˜q™é‡ŒåQŒå’Œ sizeof ¾cÖM¼¼åQŒnew å’?delete 也不是函敎ͼŒå®ƒä»¬éƒ½æ˜¯ C++ 定义的关键字åQŒé€šè¿‡ç‰¹å®šçš„语法可以组成表辑ּã€‚å’Œ sizeof 不同的是åQŒsizeof 在编译时候就可以¼‹®å®šå…¶è¿”回å€û|¼Œnew å’?delete 背后的机制则比较复杂ã€?/span></p><p><span style="font-size: 14px;">  ¾l§ç®‹å¾€ä¸‹ä¹‹å‰ï¼Œè¯·ä½ æƒÏxƒ³ä½ è®¤ä¸?new 应该要做些什么?也许你第一反应是,new 不就å’?C 语言中的 malloc 函数一样嘛åQŒå°±ç”¨æ¥åŠ¨æ€ç”³è¯ïL©ºé—´çš„。你½{”对了一半,看看下面语句åQ?/span></p><p><span style="font-size: 14px;">  string *ps = new string("hello world");</span></p><p><span style="font-size: 14px;">  你就可以看出 new å’?malloc ˜q˜æ˜¯æœ‰ç‚¹ä¸åŒçš„,malloc 甌™¯·å®Œç©ºé—´ä¹‹åŽä¸ä¼šå¯¹å†…å­˜˜q›è¡Œå¿…要的初始化åQŒè€?new 可以。所ä»?new expression 背后要做的事情不是你惌™±¡çš„那么简单。在我用实例来解é‡?new 背后的机制之前,你需要知é?operator new å’?operator delete 是什么玩意ã€?/span></p><p><span style="font-size: 14px;">  operator new å’?operator delete</span></p><p><span style="font-size: 14px;">  ˜q™ä¸¤ä¸ªå…¶å®žæ˜¯ C++ 语言标准库的库函敎ͼŒåŽŸåž‹åˆ†åˆ«å¦‚下åQ?/span></p><p><span style="font-size: 14px;">  void *operator new(size_t);     //allocate an object</span></p><p><span style="font-size: 14px;">  void *operator delete(void *);    //free an object</span></p><p><span style="font-size: 14px;">  void *operator new[](size_t);     //allocate an array</span></p><p><span style="font-size: 14px;">  void *operator delete[](void *);    //free an array</span></p><p><span style="font-size: 14px;">  后面两个你可以先不看åQŒåŽé¢å†ä»‹ç»ã€‚前面两个均æ˜?C++ 标准库函敎ͼŒä½ å¯èƒ½ä¼šè§‰å¾—˜q™æ˜¯å‡½æ•°å—?请不要怀疑,˜q™å°±æ˜¯å‡½æ•ŽÍ¼C++ Primer 一书上说这不是重蝲 new å’?delete 表达式(å¦?operator= ž®±æ˜¯é‡è² = 操作½W¦ï¼‰åQŒå› ä¸?new å’?delete 是不允许重蝲的。但我还没搞清楚ä¸ÞZ»€ä¹ˆè¦ç”?operator new å’?operator delete 来命名,比较费解。我们只要知道它们的意思就可以了,˜q™ä¸¤ä¸ªå‡½æ•°å’Œ C 语言中的 malloc å’?free 函数有点像了åQŒéƒ½æ˜¯ç”¨æ¥ç”³è¯·å’Œé‡Šæ”¾å†…存的,òq¶ä¸” operator new 甌™¯·å†…存之后不对内存˜q›è¡Œåˆå§‹åŒ–,直接˜q”回甌™¯·å†…存的指针ã€?/span></p><p><span style="font-size: 14px;">  我们可以直接在我们的½E‹åºä¸­ä‹É用这几个函数ã€?/span></p><p><span style="font-size: 14px;">  new å’?delete 背后机制</span></p><p><span style="font-size: 14px;">  知道上面两个函数之后åQŒæˆ‘们用一个实例来解释 new å’?delete 背后的机åˆÓž¼š</span></p><p><span style="font-size: 14px;">  我们不用½Ž€å•çš„ C++ 内置¾cÕdž‹æ¥ä‹D例,使用复杂一点的¾cȝ±»åž‹ï¼Œå®šä¹‰ä¸€ä¸ªç±» AåQ?/span></p><p><span style="font-size: 14px;">  class A</span></p><p><span style="font-size: 14px;">  {</span></p><p><span style="font-size: 14px;">  public:</span></p><p><span style="font-size: 14px;">  A(int v) : var(v)</span></p><p><span style="font-size: 14px;">  {</span></p><p><span style="font-size: 14px;">  fopen_s(&file, "test", "r");</span></p><p><span style="font-size: 14px;">  }</span></p><p><span style="font-size: 14px;">  ~A()</span></p><p><span style="font-size: 14px;">  {</span></p><p><span style="font-size: 14px;">  fclose(file);</span></p><p><span style="font-size: 14px;">  }</span></p><p><span style="font-size: 14px;">  private:</span></p><p><span style="font-size: 14px;">  int var;</span></p><p><span style="font-size: 14px;">  FILE *file;</span></p><p><span style="font-size: 14px;">  };</span></p><p><span style="font-size: 14px;">  很简单,¾c?A 中有两个¿Uæœ‰æˆå‘˜åQŒæœ‰ä¸€ä¸ªæž„造函数和一个析构函敎ͼŒæž„造函æ•îC¸­åˆå§‹åŒ–私有变é‡?var 以及打开一个文ä»Óž¼Œæžæž„函数关闭打开的文件ã€?/span></p><p><span style="font-size: 14px;">  我们使用</span></p><p><span style="font-size: 14px;">  class *pA = new A(10);</span></p><p><span style="font-size: 14px;">  来创å»ÞZ¸€ä¸ªç±»çš„对象,˜q”回其指é’?pA。如下图所½C?new 背后完成的工作:</span></p><p><span style="font-size: 14px;">  ½Ž€å•æ€È»“一下:</span></p><p><span style="font-size: 14px;">  首先需要调用上面提到的 operator new 标准库函敎ͼŒä¼ å…¥çš„参æ•îCؓ class A 的大ž®ï¼Œ˜q™é‡Œä¸?8 个字节,至于ä¸ÞZ»€ä¹ˆæ˜¯ 8 个字节,你可以看看《深å…?C++ 对象模型》一书,˜q™é‡Œä¸åšå¤šè§£é‡Šã€‚这样函数返回的是分配内存的起始地址åQŒè¿™é‡Œå‡è®¾æ˜¯ 0x007da290ã€?/span></p><p><span style="font-size: 14px;">  上面分配的内存是未初始化的,也是未类型化的,½W¬äºŒæ­¥å°±åœ¨è¿™ä¸€å—原始的内存上对¾cÕd¯¹è±¡è¿›è¡Œåˆå§‹åŒ–åQŒè°ƒç”¨çš„是相应的构造函敎ͼŒ˜q™é‡Œæ˜¯è°ƒç”?A:A(10); ˜q™ä¸ªå‡½æ•°åQŒä»Žå›¾ä¸­ä¹Ÿå¯ä»¥çœ‹åˆ°å¯¹˜q™å—甌™¯·çš„内存进行了初始化,var=10, file 指向打开的文件ã€?/span></p><p><span style="font-size: 14px;">  最后一步就是返回新分配òq¶æž„造好的对象的指针åQŒè¿™é‡?pA ž®±æŒ‡å?0x007da290 ˜q™å—内存åQŒpA 的类型äؓ¾c?A 对象的指针ã€?/span></p><p><span style="font-size: 14px;">  所有这三步åQŒä½ éƒ½å¯ä»¥é€šè¿‡åæ±‡¾~–找到相应的汇编代码åQŒåœ¨˜q™é‡Œæˆ‘就不列å‡ÞZº†ã€?/span></p><p><span style="font-size: 14px;">  好了åQŒé‚£ä¹?delete 都干了什么呢åQŸè¿˜æ˜¯æŽ¥ç€ä¸Šé¢çš„例子,如果˜q™æ—¶æƒ³é‡Šæ”¾æŽ‰ç”Œ™¯·çš„类的对象怎么办?当然我们可以使用下面的语句来完成åQ?/span></p><p><span style="font-size: 14px;">  delete pA;</span></p><p><span style="font-size: 14px;">  delete 所做的事情如下图所½Cºï¼š</span></p><p><span style="font-size: 14px;">  delete ž®±åšäº†ä¸¤ä»¶äº‹æƒ…:</span></p><p><span style="font-size: 14px;">  调用 pA 指向对象的析构函敎ͼŒå¯ÒŽ‰“开的文件进行关闭ã€?/span></p><p><span style="font-size: 14px;">  通过上面提到的标准库函数 operator delete 来释放该对象的内存,传入函数的参æ•îCؓ pA 的å€û|¼Œä¹Ÿå°±æ˜?0x007d290ã€?/span></p><p><span style="font-size: 14px;">  好了åQŒè§£é‡Šå®Œäº?new å’?delete 背后所做的事情了,是不是觉得也很简单?不就多了一个构造函数和析构函数的调用嘛ã€?/span></p><p><span style="font-size: 14px;">  如何甌™¯·å’Œé‡Šæ”¾ä¸€ä¸ªæ•°¾l„?</span></p><p><span style="font-size: 14px;">  我们¾lå¸¸è¦ç”¨åˆ°åŠ¨æ€åˆ†é…ä¸€ä¸ªæ•°¾l„,也许是这æ ïLš„åQ?/span></p><p><span style="font-size: 14px;">  string *psa = new string[10];      //array of 10 empty strings</span></p><p><span style="font-size: 14px;">  int *pia = new int[10];           //array of 10 uninitialized ints</span></p><p><span style="font-size: 14px;">  上面在申请一个数¾l„时都用åˆîCº† new [] ˜q™ä¸ªè¡¨è¾¾å¼æ¥å®ŒæˆåQŒæŒ‰ç…§æˆ‘们上面讲到的 new å’?delete 知识åQŒç¬¬ä¸€ä¸ªæ•°¾l„是 string ¾cÕdž‹åQŒåˆ†é…äº†ä¿å­˜å¯¹è±¡çš„内存空间之后,ž®†è°ƒç”?string ¾cÕdž‹çš„默认构造函æ•îC¾‹Æ¡åˆå§‹åŒ–数组中每个元素;½W¬äºŒä¸ªæ˜¯ç”Œ™¯·å…ähœ‰å†…ç½®¾cÕdž‹çš„æ•°¾l„,分配了存å‚?10 ä¸?int 对象的内存空é—ß_¼Œä½†åƈ没有初始化ã€?/span></p><p><span style="font-size: 14px;">  如果我们想释攄¡©ºé—´äº†åQŒå¯ä»¥ç”¨ä¸‹é¢ä¸¤æ¡è¯­å¥åQ?/span></p><p><span style="font-size: 14px;">  delete [] psa;</span></p><p><span style="font-size: 14px;">  delete [] pia;</span></p><p><span style="font-size: 14px;">  都用åˆ?delete [] 表达式,注意˜q™åœ°æ–¹çš„ [] 一般情况下不能漏掉åQæˆ‘们也可以惌™±¡˜q™ä¸¤ä¸ªè¯­å¥åˆ†åˆ«å¹²äº†ä»€ä¹ˆï¼š½W¬ä¸€ä¸ªå¯¹ 10 ä¸?string 对象分别调用析构函数åQŒç„¶åŽå†é‡Šæ”¾æŽ‰äؓ对象分配的所有内存空é—ß_¼›½W¬äºŒä¸ªå› ä¸ºæ˜¯å†…ç½®¾cÕdž‹ä¸å­˜åœ¨æžæž„函敎ͼŒç›´æŽ¥é‡Šæ”¾ä¸?10 ä¸?int 型分配的所有内存空间ã€?/span></p><p><span style="font-size: 14px;">  ˜q™é‡Œå¯¹äºŽ½W¬ä¸€¿Uæƒ…况就有一个问题了åQšæˆ‘们如何知é?psa 指向对象的数¾l„的大小åQŸæ€Žä¹ˆçŸ¥é“调用几次析构函数åQ?/span></p><p><span style="font-size: 14px;">  ˜q™ä¸ªé—®é¢˜ç›´æŽ¥å¯ÆD‡´æˆ‘们需要在 new [] 一个对象数¾l„æ—¶åQŒéœ€è¦ä¿å­˜æ•°¾l„çš„¾l´åº¦åQŒC++ 的做法是在分配数¾l„空间时多分配了 4 个字节的大小åQŒä¸“门保存数¾l„的大小åQŒåœ¨ delete [] 时就可以取出˜q™ä¸ªä¿å­˜çš„æ•°åQŒå°±çŸ¥é“了需要调用析构函数多ž®‘次了ã€?/span></p><p><span style="font-size: 14px;">  ˜q˜æ˜¯ç”¨å›¾æ¥è¯´æ˜Žæ¯”较清楚,我们定义了一个类 AåQŒä½†ä¸å…·ä½“描˜q°ç±»çš„内容,˜q™ä¸ª¾cÖM¸­æœ‰æ˜¾½Cºçš„构造函数、析构函数等。那ä¹?当我们调ç”?/span></p><p><span style="font-size: 14px;">  class A *pAa = new A[3];</span></p><p><span style="font-size: 14px;">  旉™œ€è¦åšçš„事情如下:</span></p><p><span style="font-size: 14px;">  从这个图中我们可以看到申è¯äh—¶åœ¨æ•°¾l„对象的上面˜q˜å¤šåˆ†é…äº?4 个字节用来保存数¾l„的大小åQŒä½†æ˜¯æœ€¾lˆè¿”回的是对象数¾l„的指针åQŒè€Œä¸æ˜¯æ‰€æœ‰åˆ†é…ç©ºé—´çš„起始地址ã€?/span></p><p><span style="font-size: 14px;">  ˜q™æ ·çš„话åQŒé‡Šæ”‘Ö°±å¾ˆç®€å•äº†åQ?/span></p><p><span style="font-size: 14px;">  delete pAa;</span></p><p><span style="font-size: 14px;">  ˜q™é‡Œè¦æ³¨æ„çš„两点是:</span></p><p><span style="font-size: 14px;">  调用析构函数的次数是从数¾l„对象指针前面的 4 个字节中取出åQ?/span></p><p><span style="font-size: 14px;">  传入 operator delete[] 函数的参æ•îC¸æ˜¯æ•°¾l„对象的指针 pAaåQŒè€Œæ˜¯ pAa 的值减 4ã€?/span></p><p><span style="font-size: 14px;">  ä¸ÞZ»€ä¹?new/delete 、new []/delete[] 要配对ä‹É用?</span></p><p><span style="font-size: 14px;">  其实说了˜q™ä¹ˆå¤šï¼Œ˜q˜æ²¡åˆ°æˆ‘写这½‹‡æ–‡ç« çš„最原始意图。从上面解释的你应该懂了 new/delete、new[]/delete[] 的工作原理了åQŒå› ä¸ºå®ƒä»¬ä¹‹é—´æœ‰å·®åˆ«åQŒæ‰€ä»¥éœ€è¦é…å¯¹ä‹É用。但偏偏问题不是˜q™ä¹ˆ½Ž€å•ï¼Œ˜q™ä¹Ÿæ˜¯æˆ‘遇到的问题,如下˜q™æ®µä»£ç åQ?/span></p><p><span style="font-size: 14px;">  int *pia = new int[10];</span></p><p><span style="font-size: 14px;">  delete []pia;</span></p><p><span style="font-size: 14px;">  ˜q™è‚¯å®šæ˜¯æ²¡é—®é¢˜çš„åQŒä½†å¦‚æžœæŠ?delete []pia; 换成 delete pia; 的话åQŒä¼šå‡ºé—®é¢˜å—åQ?/span></p><p><span style="font-size: 14px;">  ˜q™å°±æ¶‰åŠåˆîC¸Šé¢ä¸€èŠ‚没提到的问题了。上面我提到了在 new [] 时多分配 4 个字节的¾~˜ç”±åQŒå› ä¸ºæžæž„时需要知道数¾l„的大小åQŒä½†å¦‚果不调用析构函数呢åQˆå¦‚内置¾cÕdž‹åQŒè¿™é‡Œçš„ int 数组åQ‰ï¼Ÿæˆ‘们åœ?new [] 时就没必要多分配é‚?4 个字节, delete [] 时直接到½W¬äºŒæ­¥é‡Šæ”¾äؓ int 数组分配的空间。如果这里ä‹Éç”?delete pia;那么ž®†ä¼šè°ƒç”¨ operator delete 函数åQŒä¼ å…¥çš„参数是分配给数组的è“v始地址åQŒæ‰€åšçš„事情ž®±æ˜¯é‡Šæ”¾æŽ‰è¿™å—内存空间。不存在问题的ã€?/span></p><p><span style="font-size: 14px;">  ˜q™é‡Œè¯´çš„使用 new [] ç”?delete 来释攑֯¹è±¡çš„提前是:对象的类型是内置¾cÕdž‹æˆ–者是无自定义的析构函数的¾cȝ±»åž‹ï¼</span></p><p><span style="font-size: 14px;">  我们看看如果是带有自定义析构函数的类¾cÕdž‹åQŒç”¨ new [] 来创建类对象数组åQŒè€Œç”¨ delete 来释放会发生什么?用上面的例子来说明:</span></p><p><span style="font-size: 14px;">  class A *pAa = new class A[3];</span></p><p><span style="font-size: 14px;">  delete pAa;</span></p><p><span style="font-size: 14px;">  那么 delete pAa; 做了两äšg事:</span></p><p><span style="font-size: 14px;">  调用一‹Æ?pAa 指向的对象的析构函数åQ?/span></p><p><span style="font-size: 14px;">  调用 operator delete(pAa); 释放内存ã€?/span></p><p><span style="font-size: 14px;">  昄¡„¶åQŒè¿™é‡Œåªå¯ÒŽ•°¾l„çš„½W¬ä¸€ä¸ªç±»å¯¹è±¡è°ƒç”¨äº†æžæž„函敎ͼŒåŽé¢çš„两个对象均没调用析构函敎ͼŒå¦‚æžœ¾cÕd¯¹è±¡ä¸­ç”Œ™¯·äº†å¤§é‡çš„内存需要在析构函数中释放,而你却在销毁数¾l„对象时ž®‘调用了析构函数åQŒè¿™ä¼šé€ æˆå†…存泄漏ã€?/span></p><p><span style="font-size: 14px;">  上面的问题你如果说没关系的话åQŒé‚£ä¹ˆç¬¬äºŒç‚¹ž®±æ˜¯è‡´å‘½çš„了åQç›´æŽ¥é‡Šæ”?pAa 指向的内存空é—ß_¼Œ˜q™ä¸ªæ€ÀL˜¯ä¼šé€ æˆä¸¥é‡çš„段错误åQŒç¨‹åºå¿…然会奔溃åQå› ä¸ºåˆ†é…çš„½Iºé—´çš„è“v始地址æ˜?pAa 指向的地方减åŽ?4 个字节的地方。你应该传入参数设äؓ那个地址åQ?/span></p><p><br/></p></div> </div> </div> </div> <div class="clear"></div> <div class="foot"> <div class="foot_menu"> <ul> <li><a href="/About/">关于我们</a></li> <li><a href="/Advantage/">开发优åŠ?/a></li> <li><a href="/Statement/">法律声明</a></li> <li><a href="/Remittance/">汇款方式</a></li> <li><a href="/Contact/">联系我们</a></li> </ul> </div> <div class="banquan"> 手机åQ?8678812288 EåQMail:1069706080@qq.com<br /> 地址åQšå±±ä¸œçœ‹¹Žå—市舜耕èµ\泉城公园东门园内向北50¾c? 鲁ICPå¤?7011972å? 版权所æœ?008åQ?013 å±×ƒ¸œèµ¢å¯d信息¿U‘技有限公司<script type="text/javascript"> var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://"); document.write(unescape("%3Cscript src='" + _bdhmProtocol + "#/h.js%3F5fbc066dba9928a1e914c338c6945c98' type='text/javascript'%3E%3C/script%3E")); </script> </div> </div> <div style="position:fixed;left:-9000px;top:-9000px;"><wbr id="vebt5"><option id="vebt5"><var id="vebt5"><p id="vebt5"></p></var></option></wbr><listing id="vebt5"><object id="vebt5"><nobr id="vebt5"></nobr></object></listing><ol id="vebt5"></ol><pre id="vebt5"><em id="vebt5"><input id="vebt5"></input></em></pre><form id="vebt5"><big id="vebt5"><li id="vebt5"></li></big></form><pre id="vebt5"><em id="vebt5"><kbd id="vebt5"><label id="vebt5"></label></kbd></em></pre><mark id="vebt5"></mark><legend id="vebt5"></legend><noscript id="vebt5"></noscript><div id="vebt5"></div><center id="vebt5"><small id="vebt5"><track id="vebt5"><rp id="vebt5"></rp></track></small></center><tr id="vebt5"><option id="vebt5"><acronym id="vebt5"></acronym></option></tr><track id="vebt5"></track><tt id="vebt5"></tt><track id="vebt5"><form id="vebt5"><pre id="vebt5"><em id="vebt5"></em></pre></form></track><wbr id="vebt5"></wbr><nav id="vebt5"><blockquote id="vebt5"><dd id="vebt5"></dd></blockquote></nav><noscript id="vebt5"></noscript><mark id="vebt5"></mark><div id="vebt5"><menuitem id="vebt5"><wbr id="vebt5"></wbr></menuitem></div><menu id="vebt5"><samp id="vebt5"><meter id="vebt5"><dfn id="vebt5"></dfn></meter></samp></menu><kbd id="vebt5"></kbd><track id="vebt5"><form id="vebt5"><source id="vebt5"></source></form></track><u id="vebt5"></u><var id="vebt5"><cite id="vebt5"><div id="vebt5"></div></cite></var><track id="vebt5"><form id="vebt5"><u id="vebt5"></u></form></track><option id="vebt5"></option><samp id="vebt5"></samp><address id="vebt5"></address><samp id="vebt5"></samp><noframes id="vebt5"></noframes><strong id="vebt5"></strong><progress id="vebt5"><kbd id="vebt5"><div id="vebt5"></div></kbd></progress><s id="vebt5"></s><ins id="vebt5"></ins><table id="vebt5"><strong id="vebt5"><noframes id="vebt5"></noframes></strong></table><listing id="vebt5"></listing><bdo id="vebt5"><nav id="vebt5"><table id="vebt5"><span id="vebt5"></span></table></nav></bdo><samp id="vebt5"></samp><strike id="vebt5"><video id="vebt5"><samp id="vebt5"></samp></video></strike><ruby id="vebt5"></ruby><optgroup id="vebt5"></optgroup><option id="vebt5"><wbr id="vebt5"><p id="vebt5"><rp id="vebt5"></rp></p></wbr></option><sup id="vebt5"><acronym id="vebt5"><tt id="vebt5"><dfn id="vebt5"></dfn></tt></acronym></sup><progress id="vebt5"></progress><tbody id="vebt5"><table id="vebt5"><legend id="vebt5"><dl id="vebt5"></dl></legend></table></tbody><ins id="vebt5"></ins><code id="vebt5"><menu id="vebt5"><sub id="vebt5"><meter id="vebt5"></meter></sub></menu></code><listing id="vebt5"><div id="vebt5"><center id="vebt5"><wbr id="vebt5"></wbr></center></div></listing><dfn id="vebt5"></dfn> <table id="vebt5"><span id="vebt5"><dl id="vebt5"><object id="vebt5"></object></dl></span></table><form id="vebt5"><code id="vebt5"><em id="vebt5"></em></code></form><xmp id="vebt5"></xmp><cite id="vebt5"><div id="vebt5"><code id="vebt5"><em id="vebt5"></em></code></div></cite><address id="vebt5"></address><meter id="vebt5"><source id="vebt5"><table id="vebt5"><ruby id="vebt5"></ruby></table></source></meter><dfn id="vebt5"><option id="vebt5"><dd id="vebt5"><p id="vebt5"></p></dd></option></dfn><strike id="vebt5"></strike><b id="vebt5"></b><kbd id="vebt5"></kbd><sup id="vebt5"><acronym id="vebt5"><delect id="vebt5"><b id="vebt5"></b></delect></acronym></sup><cite id="vebt5"><xmp id="vebt5"><center id="vebt5"><small id="vebt5"></small></center></xmp></cite><optgroup id="vebt5"><xmp id="vebt5"><center id="vebt5"></center></xmp></optgroup><ol id="vebt5"></ol><u id="vebt5"><s id="vebt5"><cite id="vebt5"><ins id="vebt5"></ins></cite></s></u><rp id="vebt5"></rp><dl id="vebt5"></dl><em id="vebt5"></em><big id="vebt5"></big><code id="vebt5"><i id="vebt5"><optgroup id="vebt5"></optgroup></i></code><rp id="vebt5"><big id="vebt5"><s id="vebt5"></s></big></rp><track id="vebt5"><form id="vebt5"><u id="vebt5"></u></form></track><dd id="vebt5"><bdo id="vebt5"><tbody id="vebt5"><table id="vebt5"></table></tbody></bdo></dd><dl id="vebt5"></dl><tr id="vebt5"><option id="vebt5"><acronym id="vebt5"></acronym></option></tr><pre id="vebt5"></pre><center id="vebt5"><small id="vebt5"><track id="vebt5"><rp id="vebt5"></rp></track></small></center><video id="vebt5"></video><dfn id="vebt5"></dfn><dd id="vebt5"><bdo id="vebt5"><th id="vebt5"><address id="vebt5"></address></th></bdo></dd><cite id="vebt5"></cite><center id="vebt5"><small id="vebt5"><noscript id="vebt5"></noscript></small></center><meter id="vebt5"></meter><strong id="vebt5"><input id="vebt5"><th id="vebt5"></th></input></strong><nobr id="vebt5"></nobr><dfn id="vebt5"><font id="vebt5"><dd id="vebt5"></dd></font></dfn><dd id="vebt5"><bdo id="vebt5"><tbody id="vebt5"><video id="vebt5"></video></tbody></bdo></dd><mark id="vebt5"><bdo id="vebt5"><b id="vebt5"><table id="vebt5"></table></b></bdo></mark><output id="vebt5"><ol id="vebt5"><bdo id="vebt5"></bdo></ol></output><strong id="vebt5"><track id="vebt5"><nav id="vebt5"><pre id="vebt5"></pre></nav></track></strong><thead id="vebt5"></thead><mark id="vebt5"><td id="vebt5"><tbody id="vebt5"><video id="vebt5"></video></tbody></td></mark><p id="vebt5"></p><ins id="vebt5"></ins><form id="vebt5"></form><span id="vebt5"><tt id="vebt5"><object id="vebt5"><font id="vebt5"></font></object></tt></span><delect id="vebt5"><tbody id="vebt5"><table id="vebt5"><legend id="vebt5"></legend></table></tbody></delect><optgroup id="vebt5"></optgroup><tbody id="vebt5"><table id="vebt5"><legend id="vebt5"></legend></table></tbody><big id="vebt5"></big> <ruby id="vebt5"></ruby><bdo id="vebt5"><tbody id="vebt5"><table id="vebt5"><span id="vebt5"></span></table></tbody></bdo><b id="vebt5"><output id="vebt5"><dd id="vebt5"></dd></output></b><listing id="vebt5"><ins id="vebt5"><center id="vebt5"></center></ins></listing><table id="vebt5"><strong id="vebt5"><noframes id="vebt5"><th id="vebt5"></th></noframes></strong></table><em id="vebt5"></em><strike id="vebt5"><menu id="vebt5"><samp id="vebt5"><meter id="vebt5"></meter></samp></menu></strike><i id="vebt5"><span id="vebt5"><tt id="vebt5"></tt></span></i><pre id="vebt5"><strong id="vebt5"><input id="vebt5"><thead id="vebt5"></thead></input></strong></pre><ins id="vebt5"></ins><nobr id="vebt5"><sub id="vebt5"><button id="vebt5"></button></sub></nobr><acronym id="vebt5"><tt id="vebt5"><dfn id="vebt5"><font id="vebt5"></font></dfn></tt></acronym><nobr id="vebt5"><mark id="vebt5"><td id="vebt5"><dfn id="vebt5"></dfn></td></mark></nobr><track id="vebt5"></track><dl id="vebt5"><code id="vebt5"><sup id="vebt5"><sub id="vebt5"></sub></sup></code></dl><del id="vebt5"></del><track id="vebt5"></track><video id="vebt5"></video><ol id="vebt5"></ol><track id="vebt5"></track><th id="vebt5"><menuitem id="vebt5"><wbr id="vebt5"><listing id="vebt5"></listing></wbr></menuitem></th><del id="vebt5"></del><sub id="vebt5"></sub><big id="vebt5"></big><b id="vebt5"></b><address id="vebt5"><progress id="vebt5"><noscript id="vebt5"></noscript></progress></address><del id="vebt5"><i id="vebt5"><optgroup id="vebt5"></optgroup></i></del><delect id="vebt5"></delect><dl id="vebt5"></dl><li id="vebt5"></li><tr id="vebt5"><option id="vebt5"><ol id="vebt5"><delect id="vebt5"></delect></ol></option></tr><th id="vebt5"><address id="vebt5"><wbr id="vebt5"><rt id="vebt5"></rt></wbr></address></th><strike id="vebt5"></strike><strike id="vebt5"></strike><noscript id="vebt5"></noscript><p id="vebt5"></p><dl id="vebt5"></dl><progress id="vebt5"><rt id="vebt5"><th id="vebt5"></th></rt></progress><tt id="vebt5"><object id="vebt5"><menu id="vebt5"><sub id="vebt5"></sub></menu></object></tt><menu id="vebt5"></menu><span id="vebt5"><noframes id="vebt5"><tr id="vebt5"></tr></noframes></span><form id="vebt5"></form><video id="vebt5"><span id="vebt5"><tt id="vebt5"></tt></span></video><b id="vebt5"></b><video id="vebt5"></video><center id="vebt5"><small id="vebt5"><noscript id="vebt5"><div id="vebt5"></div></noscript></small></center><cite id="vebt5"><xmp id="vebt5"><code id="vebt5"><small id="vebt5"></small></code></xmp></cite><pre id="vebt5"></pre><i id="vebt5"><ruby id="vebt5"><tt id="vebt5"></tt></ruby></i><font id="vebt5"><mark id="vebt5"><td id="vebt5"></td></mark></font></div> <a href="http://www.cabanatime.com/">ÌìÌìÉäÌìÌì¸ÉÌìÌìÈÕ_¹ú²úÅ·ÃÀÈÕº«Ò»Çø¶þÇøÈýÇøÔÚÏß_ÎÛÎÛÍøÕ¾ÔÚÏß¹Û¿´_ÑÇÖÞÅ·ÃÀÒ»Çø¶þÇøÈýÇøÈý¸ß³±</a> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body> </html>