亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ei3.htm

?? 有基本了解的程序員或程序愛好者而做
?? HTM
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd">
<HTML LANG="EN">
<HEAD>
<title>Effective C++, 2E | Item 3: Prefer new and delete to malloc and free</TITLE>
<LINK REL=STYLESHEET HREF=../INTRO/ECMEC.CSS>

<SCRIPT LANGUAGE="Javascript" SRC="../JAVA/COOKIE.JS"></SCRIPT>
<SCRIPT LANGUAGE="Javascript">var imagemax = 0; setCurrentMax(0);</SCRIPT>
<SCRIPT LANGUAGE="Javascript" SRC="../JAVA/DINGBATS.JS"></SCRIPT>
<SCRIPT LANGUAGE="Javascript">
var dingbase = "EI3_DIR.HTM";
var dingtext = "Item E3, P";
if (self == top) {
 top.location.replace(dingbase + this.location.hash);
}
</SCRIPT>

</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" ONLOAD="setResize()">
<!-- SectionName="E3: Prefer new and delete to malloc and free" -->
<A NAME="1838"></A>
<DIV ALIGN="CENTER"><FONT SIZE="-1">Back to <A HREF="./EI2_FR.HTM" TARGET="_top">Item 2: Prefer &lt;iostream&gt; to &lt;stdio.h&gt;.</A> &nbsp;&nbsp;<BR>&nbsp;&nbsp;Continue to <A HREF="./EI4_FR.HTM" TARGET="_top">Item 4: Prefer C++-style comments.</A></FONT></DIV>

<P><A NAME="dingp1"></A><FONT ID="eititle">Item 3: &nbsp; Prefer <CODE>new</CODE> and <CODE>delete</CODE> to <CODE>malloc</CODE> and <CODE>free</CODE>.</FONT><SCRIPT>create_link(1);</SCRIPT>
</P>
<A NAME="1839"></A>
<P><A NAME="dingp2"></A>
The problem with <CODE>malloc</CODE> and <CODE>free</CODE> (and their variants) is simple: they don't know about constructors and <NOBR>destructors.<SCRIPT>create_link(2);</SCRIPT>
</NOBR></P>
<A NAME="1840"></A>
<P><A NAME="dingp3"></A>
Consider the following two ways to get space for an array of 10 <CODE>string</CODE> objects, one using <CODE>malloc</CODE>, the other using <CODE>new</CODE>:<SCRIPT>create_link(3);</SCRIPT>
</P>
<A NAME="1842"></A>
<UL><PRE>string *stringArray1 =
  static_cast&lt;string*&gt;(malloc(10 * sizeof(string)));
</PRE>
</UL><A NAME="1843"></A>
<UL><PRE>string *stringArray2 = new string[10];
</PRE>
</UL><A NAME="1844"></A>
<P><A NAME="dingp4"></A>
Here <CODE>stringArray1</CODE> points to enough memory for 10 <CODE>string</CODE> objects, but no objects have been constructed in that memory. Furthermore, without jumping through some rather obscure linguistic hoops (such as those described in Items <A HREF="../MEC/MI4_FR.HTM#5218" TARGET="_top">M4</A> and <A HREF="../MEC/MI8_FR.HTM#33985" TARGET="_top">M8</A>), you have no way to initialize the objects in the array. In other words, <CODE>stringArray1</CODE> is pretty useless. In contrast, <CODE>stringArray2</CODE> points to an array of 10 fully constructed <CODE>string</CODE> objects, each of which can safely be used in any operation taking a <CODE>string</CODE>.<SCRIPT>create_link(4);</SCRIPT>
</P>
<A NAME="1845"></A>
<P><A NAME="dingp5"></A>
Nonetheless, let's suppose you magically managed to initialize the objects in the <CODE>stringArray1</CODE> array. Later on in your program, then, you'd expect to do <NOBR>this:<SCRIPT>create_link(5);</SCRIPT>
</NOBR></P>
<A NAME="1846"></A>
<UL><PRE>free(stringArray1);
</PRE>
</UL><A NAME="1847"></A>
<UL><PRE>
delete [] stringArray2;      // see <A HREF="./EI5_FR.HTM#1869" TARGET="_top">Item 5</A> for why the
                             // "[]" is necessary
</PRE>
</UL><A NAME="1848"></A>
<P><A NAME="dingp6"></A>
The call to <CODE>free</CODE> will release the memory pointed to by <CODE>stringArray1</CODE>, but no destructors will be called on the <CODE>string</CODE> objects in that mem<A NAME="p20"></A>ory. If the <CODE>string</CODE> objects themselves allocated memory, as <CODE>string</CODE> objects are wont to do, all the memory they allocated will be lost. On the other hand, when <CODE>delete</CODE> is called on <CODE>stringArray2</CODE>, a destructor is called for each object in the array before any memory is <NOBR>released.<SCRIPT>create_link(6);</SCRIPT>
</NOBR></P>
<A NAME="1849"></A>
<P><A NAME="dingp7"></A>
Because <CODE>new</CODE> and <CODE>delete</CODE> interact properly with constructors and destructors, they are clearly the superior <NOBR>choice.<SCRIPT>create_link(7);</SCRIPT>
</NOBR></P>
<A NAME="104344"></A>
<P><A NAME="dingp8"></A>
Mixing <CODE>new</CODE> and <CODE>delete</CODE> with <CODE>malloc</CODE> and <CODE>free</CODE> is usually a bad idea. When you try to call <CODE>free</CODE> on a pointer you got from <CODE>new</CODE> or call <CODE>delete</CODE> on a pointer you got from <CODE>malloc</CODE>, the results are undefined, and we all know what "undefined" means: it means it works during development, it works during testing, and it blows up in your most important customers' <NOBR>faces.<SCRIPT>create_link(8);</SCRIPT>
</NOBR></P>
<A NAME="13170"></A>
<P><A NAME="dingp9"></A>
The incompatibility of <CODE>new</CODE>/<CODE>delete</CODE> and <CODE>malloc</CODE>/<CODE>free</CODE> can lead to some interesting complications. For example, the <CODE>strdup</CODE> function commonly found in <CODE>&lt;string.h&gt;</CODE> takes a <CODE>char*</CODE>-based string and returns a copy of <NOBR>it:<SCRIPT>create_link(9);</SCRIPT>
</NOBR></P>
<A NAME="1851"></A>
<UL><PRE>
char * strdup(const char *ps);      // return a copy of what
                                    // ps points to
</PRE>
</UL><A NAME="1852"></A>
<P><A NAME="dingp10"></A>
At some sites, both C and C++ use the same version of <CODE>strdup</CODE>, so the memory allocated inside the function comes from <CODE>malloc</CODE>. As a result, unwitting C++ programmers calling <CODE>strdup</CODE> might overlook the fact that they must use <CODE>free</CODE> on the pointer returned from <CODE>strdup</CODE>. But wait! To forestall such complications, some sites might decide to rewrite <CODE>strdup</CODE> for C++ and have this rewritten version call <CODE>new</CODE> inside the function, thereby mandating that callers later use <CODE>delete</CODE>. As you can imagine, this can lead to some pretty nightmarish portability problems as code is shuttled back and forth between sites with different forms of <CODE>strdup</CODE>.<SCRIPT>create_link(10);</SCRIPT>
</P>
<A NAME="12827"></A>
<P><A NAME="dingp11"></A>
Still, C++ programmers are as interested in code reuse as C programmers, and it's a simple fact that there are lots of C libraries based on <CODE>malloc</CODE> and <CODE>free</CODE> containing code that is very much worth reusing. When taking advantage of such a library, it's likely you'll end up with the responsibility for <CODE>free</CODE>ing memory <CODE>malloc</CODE>ed by the library and/or <CODE>malloc</CODE>ing memory the library itself will <CODE>free</CODE>. That's fine. There's nothing wrong with calling <CODE>malloc</CODE> and <CODE>free</CODE> inside a C++ program as long as you make sure the pointers you get from <CODE>malloc</CODE> always meet their maker in <CODE>free</CODE> and the pointers you get from <CODE>new</CODE> eventually find their way to <CODE>delete</CODE>. The problems start when you get sloppy and try to mix <CODE>new</CODE> with <CODE>free</CODE> or <CODE>malloc</CODE> with <CODE>delete</CODE>. That's just asking for <NOBR>trouble.<SCRIPT>create_link(11);</SCRIPT>
</NOBR></P>
<A NAME="1853"></A>
<P><A NAME="dingp12"></A>
<A NAME="p21"></A>Given that <CODE>malloc</CODE> and <CODE>free</CODE> are ignorant of constructors and destructors and that mixing <CODE>malloc</CODE>/<CODE>free</CODE> with <CODE>new</CODE>/<CODE>delete</CODE> can be more volatile than a fraternity rush party, you're best off sticking to an exclusive diet of <CODE>new</CODE>s and <CODE>delete</CODE>s whenever you <NOBR>can.<SCRIPT>create_link(12);</SCRIPT>
</NOBR></P>
<DIV ALIGN="CENTER"><FONT SIZE="-1">Back to <A HREF="./EI2_FR.HTM" TARGET="_top">Item 2: Prefer &lt;iostream&gt; to &lt;stdio.h&gt;.</A> &nbsp;&nbsp;<BR>&nbsp;&nbsp;Continue to <A HREF="./EI4_FR.HTM" TARGET="_top">Item 4: Prefer C++-style comments.</A></FONT></DIV>

</BODY>
</HTML>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲国产专区| 日本特黄久久久高潮| 午夜精品一区二区三区三上悠亚| 丝瓜av网站精品一区二区| 成人黄色片在线观看| 欧美剧情电影在线观看完整版免费励志电影 | 欧美日韩午夜影院| 中文字幕精品三区| 琪琪一区二区三区| 色综合久久综合网欧美综合网| 欧美精品1区2区3区| 亚洲卡通动漫在线| 丰满岳乱妇一区二区三区| 91精品国产91久久久久久最新毛片| 国产精品久久久久影院老司 | 欧美一区二区三区思思人| 亚洲色图丝袜美腿| 成人av免费在线| 精品国产一区a| 亚洲精选视频在线| 91在线观看视频| 国产精品美女一区二区三区| 国产在线观看一区二区| 欧美xxxxxxxxx| 人禽交欧美网站| 91精品久久久久久久91蜜桃| 亚洲国产欧美另类丝袜| 欧美色偷偷大香| 午夜伦理一区二区| 欧美三级三级三级爽爽爽| 亚洲一级二级三级| 日本道精品一区二区三区| 中文字幕一区二区视频| 成人黄色av网站在线| 久久精品视频一区| 成人黄色片在线观看| 亚洲视频在线一区| 欧美三区在线观看| 日韩福利电影在线| 精品免费国产二区三区| 国产久卡久卡久卡久卡视频精品| 久久综合久久综合久久综合| 国产成人午夜电影网| 国产精品久久三| 色婷婷久久综合| 午夜精品视频一区| 精品国产乱码久久| 不卡视频在线看| 亚洲综合男人的天堂| 欧美亚洲一区二区三区四区| 天天影视涩香欲综合网| 精品国产不卡一区二区三区| 久久66热偷产精品| 国产精品日韩成人| 91黄色在线观看| 日本成人超碰在线观看| 久久五月婷婷丁香社区| 91婷婷韩国欧美一区二区| 亚洲r级在线视频| wwwwww.欧美系列| 粉嫩aⅴ一区二区三区四区 | 久久精品一级爱片| 日本高清无吗v一区| 亚洲成av人片一区二区三区| 久久午夜羞羞影院免费观看| 色哟哟在线观看一区二区三区| 亚洲国产一区视频| 久久久亚洲高清| 欧美无乱码久久久免费午夜一区| 美女视频黄 久久| 中文字幕 久热精品 视频在线| 色婷婷亚洲精品| 国产一区二区看久久| 一区二区国产视频| 国产亚洲欧美一区在线观看| 欧美性大战久久久久久久蜜臀| 美日韩一区二区三区| 中文字幕在线观看不卡| 91精品国产综合久久婷婷香蕉| 国产精品资源在线| 奇米在线7777在线精品| 综合久久久久综合| 精品欧美久久久| 在线观看av一区| 韩国精品久久久| 日本一道高清亚洲日美韩| 中文字幕欧美激情一区| 精品精品欲导航| 欧美日韩精品欧美日韩精品| av电影天堂一区二区在线观看| 美女视频一区二区三区| 亚洲国产成人tv| 亚洲免费资源在线播放| 欧美激情资源网| 久久久天堂av| 精品国产乱码久久久久久久久| 色婷婷av一区| 一本大道综合伊人精品热热 | 一区在线观看视频| 久久久不卡网国产精品一区| 欧美精品丝袜久久久中文字幕| 91影视在线播放| 成人激情动漫在线观看| 国产精品综合二区| 国产乱码精品一区二区三区五月婷| 午夜影院久久久| 亚洲一二三四在线| 亚洲精选视频在线| 亚洲视频一区二区免费在线观看| 久久精品免视看| www日韩大片| 久久色.com| 国产欧美一区二区三区沐欲| 久久午夜电影网| 中文av一区特黄| 综合在线观看色| 亚洲少妇30p| 亚洲人成网站精品片在线观看| 国产精品国产成人国产三级| 日韩美女视频一区二区| 亚洲欧洲国产专区| 亚洲精品乱码久久久久久黑人 | 蜜臀av性久久久久蜜臀aⅴ| 日本伊人色综合网| 极品少妇一区二区| 国产精品18久久久| 色婷婷亚洲婷婷| 91麻豆精品国产91久久久久久 | 麻豆一区二区三区| 国精产品一区一区三区mba视频| 毛片一区二区三区| 粉嫩aⅴ一区二区三区四区| 99视频一区二区三区| 91视频观看视频| 欧美成人伊人久久综合网| 欧美精品一区视频| 国产精品嫩草影院av蜜臀| 亚洲欧美二区三区| 日韩精品亚洲一区| 国产成人在线色| 欧美三级一区二区| 91片在线免费观看| 在线不卡a资源高清| 91色乱码一区二区三区| 欧美日韩国产综合久久| 日韩欧美国产一区在线观看| 26uuu欧美| 26uuu欧美| 亚洲综合免费观看高清完整版在线 | 粉嫩高潮美女一区二区三区| 91精品福利视频| 久久这里只有精品视频网| 中文字幕亚洲精品在线观看| 日韩国产在线一| 成人免费观看视频| 欧美一级二级在线观看| 国产精品白丝在线| 捆绑调教美女网站视频一区| 99久久精品费精品国产一区二区| 欧美挠脚心视频网站| 中文字幕不卡在线播放| 日韩高清电影一区| 色综合久久综合中文综合网| 日韩视频在线你懂得| 亚洲欧美日韩一区二区| 另类调教123区| 精品视频一区二区不卡| 国产精品福利电影一区二区三区四区| 天堂在线亚洲视频| 99久久777色| 久久久久久99久久久精品网站| 亚洲亚洲人成综合网络| 成人av片在线观看| 日本一区二区在线不卡| 日本亚洲最大的色成网站www| 色综合天天在线| 国产精品日产欧美久久久久| 久久99蜜桃精品| 欧美日韩一区二区欧美激情| 中文字幕国产精品一区二区| 久久99精品一区二区三区三区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 国产精品电影一区二区三区| 国产在线精品一区二区不卡了| 在线电影院国产精品| 一区二区三区视频在线观看| 成人国产精品视频| 国产精品私人影院| 国产成人精品影视| 国产精品无遮挡| 成人免费视频视频在线观看免费 | 在线一区二区观看| 亚洲免费av在线| 一本大道av伊人久久综合| 亚洲日本免费电影| 色狠狠综合天天综合综合| 亚洲视频一二区| 91久久线看在观草草青青| 亚洲男人的天堂在线观看| 色综合久久中文字幕|