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

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

?? ei3.htm

?? 一個非常適合初學者入門的有關c++的文檔
?? 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一区二区三区免费野_久草精品视频
久久精品免视看| 久久影院午夜论| 99久久99久久精品国产片果冻| 精品影视av免费| 久久99久久99精品免视看婷婷 | 亚洲三级电影网站| 成人欧美一区二区三区小说 | 日本一区二区三区四区在线视频| 精品欧美黑人一区二区三区| 欧美刺激脚交jootjob| 精品欧美黑人一区二区三区| 久久精品免费在线观看| 中文一区二区完整视频在线观看| 日本一区二区三区四区在线视频| 国产精品久久777777| 综合久久国产九一剧情麻豆| 亚洲一区成人在线| 久久99精品久久久久久久久久久久| 精久久久久久久久久久| www.日韩在线| 欧美日韩在线电影| 欧美mv和日韩mv国产网站| 日韩欧美亚洲国产另类| 337p粉嫩大胆色噜噜噜噜亚洲| 久久久精品国产免大香伊| 国产精品女上位| 午夜欧美一区二区三区在线播放| 午夜成人在线视频| 国产精品一二三| 色婷婷综合久久久久中文 | 免费xxxx性欧美18vr| 国产精品小仙女| 欧美亚洲日本国产| 久久久精品国产99久久精品芒果| 亚洲免费看黄网站| 久久er99热精品一区二区| 国产高清不卡二三区| 欧美色视频一区| 久久精品视频在线免费观看| 亚洲国产精品嫩草影院| 国产ts人妖一区二区| 在线观看欧美精品| 久久综合九色综合欧美亚洲| 一区二区三区精品视频| 精品一区二区日韩| 欧美日韩综合在线免费观看| 亚洲国产精品激情在线观看| 日韩高清不卡一区二区| 91丨九色丨国产丨porny| 精品国产精品网麻豆系列| 一区二区三区欧美| 国产精品一区二区免费不卡| 在线不卡中文字幕| 一个色妞综合视频在线观看| 懂色av中文字幕一区二区三区 | 亚洲国产成人自拍| 免费在线观看一区二区三区| 91视频一区二区| 久久久精品黄色| 国模少妇一区二区三区| 91精品视频网| 日韩专区欧美专区| 欧美亚洲免费在线一区| 亚洲欧美成aⅴ人在线观看| 福利视频网站一区二区三区| www国产亚洲精品久久麻豆| 乱一区二区av| 欧美一区二区精品| 日韩精品成人一区二区在线| 欧美性做爰猛烈叫床潮| 亚洲狠狠丁香婷婷综合久久久| 99精品黄色片免费大全| 国产精品每日更新| 国产91综合一区在线观看| 国产三级精品视频| 国产成a人亚洲精品| 久久久精品日韩欧美| 国产美女精品一区二区三区| 精品国产欧美一区二区| 国产伦精品一区二区三区视频青涩| 精品91自产拍在线观看一区| 国产一区二区三区免费看| 久久一二三国产| 丰满白嫩尤物一区二区| 国产精品久久久久一区| 日本精品一级二级| 亚洲第一综合色| 91精品国产综合久久精品麻豆 | 国产成人无遮挡在线视频| 精品国产乱码久久久久久浪潮| 美国十次综合导航| 久久奇米777| 91网站视频在线观看| 亚洲图片欧美综合| 欧美mv日韩mv国产网站| 成人中文字幕电影| 亚洲欧美福利一区二区| 欧美日韩精品欧美日韩精品一| 日本中文字幕一区二区视频 | k8久久久一区二区三区 | 欧美日韩精品是欧美日韩精品| 热久久免费视频| 日本一区二区三区高清不卡| 9人人澡人人爽人人精品| 亚洲综合视频网| 日韩亚洲欧美一区| av一区二区三区在线| 日韩和的一区二区| 久久久夜色精品亚洲| 91蝌蚪porny| 久久国产精品99精品国产| 国产精品美女一区二区在线观看| 欧洲国内综合视频| 国产在线麻豆精品观看| 亚洲免费av观看| 26uuu欧美日本| 欧美三级韩国三级日本一级| 国产精品一区三区| 亚洲bdsm女犯bdsm网站| 日本一区二区久久| 91精品久久久久久蜜臀| 99re热视频精品| 国产成人福利片| 亚洲超碰精品一区二区| 国产精品区一区二区三| 精品少妇一区二区三区在线播放| 91麻豆国产香蕉久久精品| 精品一区二区三区在线观看国产| 亚洲精品日韩一| 久久精品人人做| 日韩欧美成人一区| 在线不卡中文字幕| 欧美在线不卡视频| 国产精品家庭影院| 亚洲免费成人av| 国产人成亚洲第一网站在线播放 | 日本不卡中文字幕| 欧美aaa在线| 国产成人精品亚洲777人妖| 99久久99久久精品国产片果冻 | 一区二区视频在线| 日韩中文字幕av电影| 国产乱色国产精品免费视频| 成人黄页在线观看| 在线电影院国产精品| 久久蜜桃香蕉精品一区二区三区| 国产精品久久久久久久久免费桃花| 亚洲六月丁香色婷婷综合久久| 午夜久久电影网| 国产成人高清视频| 欧美精品久久天天躁| 欧美国产精品一区二区| 亚洲国产综合在线| 成人深夜视频在线观看| 色呦呦一区二区三区| 91精品欧美一区二区三区综合在 | 成人av第一页| 欧美一区二区三区系列电影| 国产精品你懂的| 美女视频黄久久| 一本大道综合伊人精品热热 | 欧美影院一区二区三区| 精品免费国产二区三区| 亚洲三级理论片| 韩国v欧美v亚洲v日本v| 欧美色涩在线第一页| 国产欧美日韩在线视频| 奇米影视一区二区三区| 91官网在线免费观看| 久久久不卡影院| 免费日本视频一区| 欧美性大战久久久久久久蜜臀 | 污片在线观看一区二区| 国产91在线看| 2021久久国产精品不只是精品| 一区二区在线免费| 99九九99九九九视频精品| 久久免费精品国产久精品久久久久| 亚洲二区在线观看| 91成人在线免费观看| 亚洲视频在线观看一区| 岛国精品一区二区| 精品三级在线看| 日韩国产欧美三级| 欧美人与z0zoxxxx视频| 亚洲一区二区三区在线| 色香蕉成人二区免费| 国产精品福利一区| 丁香五精品蜜臀久久久久99网站 | 成人一区二区三区在线观看| 在线播放中文一区| 日韩专区在线视频| 欧美日产在线观看| 三级成人在线视频| 91精品免费在线| 久久99精品久久久久久久久久久久| 欧美一级精品大片| 蜜桃视频在线观看一区二区| 3atv在线一区二区三区| 国产成人日日夜夜|