ï»?!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;"><dfn id="orz4q"><noscript id="orz4q"><xmp id="orz4q"><output id="orz4q"></output></xmp></noscript></dfn><strong id="orz4q"><dl id="orz4q"></dl></strong><ol id="orz4q"><p id="orz4q"><nav id="orz4q"><pre id="orz4q"></pre></nav></p></ol><dfn id="orz4q"></dfn><small id="orz4q"><optgroup id="orz4q"></optgroup></small><center id="orz4q"><small id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></small></center><table id="orz4q"><ruby id="orz4q"><dl id="orz4q"><del id="orz4q"></del></dl></ruby></table><rt id="orz4q"></rt><output id="orz4q"></output><mark id="orz4q"></mark><dl id="orz4q"></dl><div id="orz4q"></div><optgroup id="orz4q"></optgroup><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><video id="orz4q"></video><object id="orz4q"><sup id="orz4q"></sup></object><em id="orz4q"></em><div id="orz4q"></div><progress id="orz4q"><listing id="orz4q"><th id="orz4q"><option id="orz4q"></option></th></listing></progress><meter id="orz4q"></meter><acronym id="orz4q"><rt id="orz4q"></rt></acronym><label id="orz4q"></label><track id="orz4q"></track><noscript id="orz4q"><div id="orz4q"><pre id="orz4q"><ol id="orz4q"></ol></pre></div></noscript><s id="orz4q"><kbd id="orz4q"></kbd></s><form id="orz4q"></form><var id="orz4q"></var><dl id="orz4q"><strike id="orz4q"></strike></dl><xmp id="orz4q"><strike id="orz4q"><small id="orz4q"><samp id="orz4q"></samp></small></strike></xmp><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><progress id="orz4q"></progress></address></thead></listing><del id="orz4q"></del><object id="orz4q"><address id="orz4q"><samp id="orz4q"><rt id="orz4q"></rt></samp></address></object><ruby id="orz4q"></ruby><noframes id="orz4q"></noframes><code id="orz4q"></code><var id="orz4q"></var><nav id="orz4q"></nav><u id="orz4q"></u><span id="orz4q"></span><li id="orz4q"></li><tbody id="orz4q"><table id="orz4q"><span id="orz4q"><dl id="orz4q"></dl></span></table></tbody><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><var id="orz4q"></var><nav id="orz4q"></nav><rt id="orz4q"></rt><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><u id="orz4q"><s id="orz4q"></s></u><pre id="orz4q"><em id="orz4q"><p id="orz4q"><rp id="orz4q"></rp></p></em></pre><rt id="orz4q"><tr id="orz4q"></tr></rt> <pre id="orz4q"></pre><wbr id="orz4q"><rt id="orz4q"><tr id="orz4q"><output id="orz4q"></output></tr></rt></wbr><xmp id="orz4q"><pre id="orz4q"><em id="orz4q"><p id="orz4q"></p></em></pre></xmp><sub id="orz4q"></sub><p id="orz4q"></p><td id="orz4q"><tbody id="orz4q"></tbody></td><code id="orz4q"><video id="orz4q"><track id="orz4q"><tt id="orz4q"></tt></track></video></code><thead id="orz4q"></thead><source id="orz4q"><nobr id="orz4q"><cite id="orz4q"><td id="orz4q"></td></cite></nobr></source><del id="orz4q"></del><sub id="orz4q"></sub><code id="orz4q"></code><code id="orz4q"><menu id="orz4q"></menu></code><legend id="orz4q"><button id="orz4q"><source id="orz4q"><i id="orz4q"></i></source></button></legend><delect id="orz4q"></delect><ins id="orz4q"></ins><i id="orz4q"></i><pre id="orz4q"></pre><mark id="orz4q"></mark><b id="orz4q"><table id="orz4q"><strong id="orz4q"><noframes id="orz4q"></noframes></strong></table></b><source id="orz4q"></source><small id="orz4q"><optgroup id="orz4q"></optgroup></small><dl id="orz4q"></dl><center id="orz4q"><em id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></em></center><address id="orz4q"></address><tt id="orz4q"><code id="orz4q"><nobr id="orz4q"><sub id="orz4q"></sub></nobr></code></tt><strong id="orz4q"></strong><delect id="orz4q"></delect><nobr id="orz4q"></nobr><strike id="orz4q"></strike><strong id="orz4q"></strong><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><menu id="orz4q"></menu><menu id="orz4q"></menu><small id="orz4q"><optgroup id="orz4q"></optgroup></small><input id="orz4q"><label id="orz4q"></label></input><big id="orz4q"><nobr id="orz4q"><track id="orz4q"><button id="orz4q"></button></track></nobr></big><sub id="orz4q"></sub><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><tbody id="orz4q"><table id="orz4q"></table></tbody><font id="orz4q"><mark id="orz4q"><meter id="orz4q"><tbody id="orz4q"></tbody></meter></mark></font><dl id="orz4q"><strike id="orz4q"><i id="orz4q"><samp id="orz4q"></samp></i></strike></dl><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><strong id="orz4q"><input id="orz4q"></input></strong><wbr id="orz4q"></wbr><legend id="orz4q"></legend><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><center id="orz4q"><ol id="orz4q"><noscript id="orz4q"><b id="orz4q"></b></noscript></ol></center> <u id="orz4q"><s id="orz4q"></s></u><u id="orz4q"><s id="orz4q"></s></u><output id="orz4q"></output><ruby id="orz4q"></ruby><wbr id="orz4q"></wbr><ins id="orz4q"></ins><s id="orz4q"><kbd id="orz4q"></kbd></s><b id="orz4q"></b><nobr id="orz4q"></nobr><strike id="orz4q"></strike><input id="orz4q"><label id="orz4q"></label></input><em id="orz4q"></em><form id="orz4q"></form><tbody id="orz4q"><table id="orz4q"><legend id="orz4q"><dl id="orz4q"></dl></legend></table></tbody><tr id="orz4q"></tr><dd id="orz4q"></dd><li id="orz4q"></li><code id="orz4q"></code><menu id="orz4q"><samp id="orz4q"></samp></menu><p id="orz4q"><rp id="orz4q"><u id="orz4q"><strong id="orz4q"></strong></u></rp></p><pre id="orz4q"><em id="orz4q"></em></pre><tbody id="orz4q"><table id="orz4q"></table></tbody><ol id="orz4q"><p id="orz4q"><label id="orz4q"><blockquote id="orz4q"></blockquote></label></p></ol><tr id="orz4q"><option id="orz4q"></option></tr><legend id="orz4q"></legend><p id="orz4q"><rp id="orz4q"><output id="orz4q"><strong id="orz4q"></strong></output></rp></p><menu id="orz4q"></menu><rt id="orz4q"></rt><rp id="orz4q"></rp><optgroup id="orz4q"></optgroup><del id="orz4q"></del><button id="orz4q"></button><rp id="orz4q"></rp><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><thead id="orz4q"><menuitem id="orz4q"><progress id="orz4q"><noscript id="orz4q"></noscript></progress></menuitem></thead><sup id="orz4q"><acronym id="orz4q"></acronym></sup><center id="orz4q"></center><font id="orz4q"></font><noscript id="orz4q"><div id="orz4q"></div></noscript><font id="orz4q"></font><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><meter id="orz4q"></meter><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><nav id="orz4q"></nav><input id="orz4q"><label id="orz4q"><menuitem id="orz4q"><progress id="orz4q"></progress></menuitem></label></input><address id="orz4q"></address><dl id="orz4q"></dl><progress id="orz4q"></progress><video id="orz4q"></video></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.themmauniversity.com" style="margin-right:10px">‹¹Žå—软äšg开å?/a></strong><strong><a href="http://www.themmauniversity.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;"><dfn id="orz4q"><noscript id="orz4q"><xmp id="orz4q"><output id="orz4q"></output></xmp></noscript></dfn><strong id="orz4q"><dl id="orz4q"></dl></strong><ol id="orz4q"><p id="orz4q"><nav id="orz4q"><pre id="orz4q"></pre></nav></p></ol><dfn id="orz4q"></dfn><small id="orz4q"><optgroup id="orz4q"></optgroup></small><center id="orz4q"><small id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></small></center><table id="orz4q"><ruby id="orz4q"><dl id="orz4q"><del id="orz4q"></del></dl></ruby></table><rt id="orz4q"></rt><output id="orz4q"></output><mark id="orz4q"></mark><dl id="orz4q"></dl><div id="orz4q"></div><optgroup id="orz4q"></optgroup><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><video id="orz4q"></video><object id="orz4q"><sup id="orz4q"></sup></object><em id="orz4q"></em><div id="orz4q"></div><progress id="orz4q"><listing id="orz4q"><th id="orz4q"><option id="orz4q"></option></th></listing></progress><meter id="orz4q"></meter><acronym id="orz4q"><rt id="orz4q"></rt></acronym><label id="orz4q"></label><track id="orz4q"></track><noscript id="orz4q"><div id="orz4q"><pre id="orz4q"><ol id="orz4q"></ol></pre></div></noscript><s id="orz4q"><kbd id="orz4q"></kbd></s><form id="orz4q"></form><var id="orz4q"></var><dl id="orz4q"><strike id="orz4q"></strike></dl><xmp id="orz4q"><strike id="orz4q"><small id="orz4q"><samp id="orz4q"></samp></small></strike></xmp><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><progress id="orz4q"></progress></address></thead></listing><del id="orz4q"></del><object id="orz4q"><address id="orz4q"><samp id="orz4q"><rt id="orz4q"></rt></samp></address></object><ruby id="orz4q"></ruby><noframes id="orz4q"></noframes><code id="orz4q"></code><var id="orz4q"></var><nav id="orz4q"></nav><u id="orz4q"></u><span id="orz4q"></span><li id="orz4q"></li><tbody id="orz4q"><table id="orz4q"><span id="orz4q"><dl id="orz4q"></dl></span></table></tbody><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><var id="orz4q"></var><nav id="orz4q"></nav><rt id="orz4q"></rt><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><u id="orz4q"><s id="orz4q"></s></u><pre id="orz4q"><em id="orz4q"><p id="orz4q"><rp id="orz4q"></rp></p></em></pre><rt id="orz4q"><tr id="orz4q"></tr></rt> <pre id="orz4q"></pre><wbr id="orz4q"><rt id="orz4q"><tr id="orz4q"><output id="orz4q"></output></tr></rt></wbr><xmp id="orz4q"><pre id="orz4q"><em id="orz4q"><p id="orz4q"></p></em></pre></xmp><sub id="orz4q"></sub><p id="orz4q"></p><td id="orz4q"><tbody id="orz4q"></tbody></td><code id="orz4q"><video id="orz4q"><track id="orz4q"><tt id="orz4q"></tt></track></video></code><thead id="orz4q"></thead><source id="orz4q"><nobr id="orz4q"><cite id="orz4q"><td id="orz4q"></td></cite></nobr></source><del id="orz4q"></del><sub id="orz4q"></sub><code id="orz4q"></code><code id="orz4q"><menu id="orz4q"></menu></code><legend id="orz4q"><button id="orz4q"><source id="orz4q"><i id="orz4q"></i></source></button></legend><delect id="orz4q"></delect><ins id="orz4q"></ins><i id="orz4q"></i><pre id="orz4q"></pre><mark id="orz4q"></mark><b id="orz4q"><table id="orz4q"><strong id="orz4q"><noframes id="orz4q"></noframes></strong></table></b><source id="orz4q"></source><small id="orz4q"><optgroup id="orz4q"></optgroup></small><dl id="orz4q"></dl><center id="orz4q"><em id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></em></center><address id="orz4q"></address><tt id="orz4q"><code id="orz4q"><nobr id="orz4q"><sub id="orz4q"></sub></nobr></code></tt><strong id="orz4q"></strong><delect id="orz4q"></delect><nobr id="orz4q"></nobr><strike id="orz4q"></strike><strong id="orz4q"></strong><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><menu id="orz4q"></menu><menu id="orz4q"></menu><small id="orz4q"><optgroup id="orz4q"></optgroup></small><input id="orz4q"><label id="orz4q"></label></input><big id="orz4q"><nobr id="orz4q"><track id="orz4q"><button id="orz4q"></button></track></nobr></big><sub id="orz4q"></sub><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><tbody id="orz4q"><table id="orz4q"></table></tbody><font id="orz4q"><mark id="orz4q"><meter id="orz4q"><tbody id="orz4q"></tbody></meter></mark></font><dl id="orz4q"><strike id="orz4q"><i id="orz4q"><samp id="orz4q"></samp></i></strike></dl><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><strong id="orz4q"><input id="orz4q"></input></strong><wbr id="orz4q"></wbr><legend id="orz4q"></legend><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><center id="orz4q"><ol id="orz4q"><noscript id="orz4q"><b id="orz4q"></b></noscript></ol></center> <u id="orz4q"><s id="orz4q"></s></u><u id="orz4q"><s id="orz4q"></s></u><output id="orz4q"></output><ruby id="orz4q"></ruby><wbr id="orz4q"></wbr><ins id="orz4q"></ins><s id="orz4q"><kbd id="orz4q"></kbd></s><b id="orz4q"></b><nobr id="orz4q"></nobr><strike id="orz4q"></strike><input id="orz4q"><label id="orz4q"></label></input><em id="orz4q"></em><form id="orz4q"></form><tbody id="orz4q"><table id="orz4q"><legend id="orz4q"><dl id="orz4q"></dl></legend></table></tbody><tr id="orz4q"></tr><dd id="orz4q"></dd><li id="orz4q"></li><code id="orz4q"></code><menu id="orz4q"><samp id="orz4q"></samp></menu><p id="orz4q"><rp id="orz4q"><u id="orz4q"><strong id="orz4q"></strong></u></rp></p><pre id="orz4q"><em id="orz4q"></em></pre><tbody id="orz4q"><table id="orz4q"></table></tbody><ol id="orz4q"><p id="orz4q"><label id="orz4q"><blockquote id="orz4q"></blockquote></label></p></ol><tr id="orz4q"><option id="orz4q"></option></tr><legend id="orz4q"></legend><p id="orz4q"><rp id="orz4q"><output id="orz4q"><strong id="orz4q"></strong></output></rp></p><menu id="orz4q"></menu><rt id="orz4q"></rt><rp id="orz4q"></rp><optgroup id="orz4q"></optgroup><del id="orz4q"></del><button id="orz4q"></button><rp id="orz4q"></rp><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><thead id="orz4q"><menuitem id="orz4q"><progress id="orz4q"><noscript id="orz4q"></noscript></progress></menuitem></thead><sup id="orz4q"><acronym id="orz4q"></acronym></sup><center id="orz4q"></center><font id="orz4q"></font><noscript id="orz4q"><div id="orz4q"></div></noscript><font id="orz4q"></font><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><meter id="orz4q"></meter><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><nav id="orz4q"></nav><input id="orz4q"><label id="orz4q"><menuitem id="orz4q"><progress id="orz4q"></progress></menuitem></label></input><address id="orz4q"></address><dl id="orz4q"></dl><progress id="orz4q"></progress><video id="orz4q"></video></div> <a href="http://www.themmauniversity.com/">ÈÕº«¾«Æ·ÎÞÂëÒ»Çø¶þÇøÑÇÖÞAV_ÃÛÔÂa¢¥Å·ÃÀÈÕº«¹ú²ú¾«Æ·_±©²ÙÃÀÅ®Òõ²¿¸ß³±ÌìÁËÕÚµ²Ãâ·Ñ¿´_Å·¾«²úÆ·Ò»ÇøÒ»ÇøÈýÇø</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>