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

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

?? ei3.htm

?? Effective & MoreEfective 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一区二区三区免费野_久草精品视频
欧美日韩五月天| 91国产免费看| 亚洲综合色自拍一区| 精品国产露脸精彩对白| 色综合久久综合网欧美综合网| 免费看日韩精品| 亚洲日本免费电影| 国产亚洲欧美色| 中文字幕精品综合| 91精品国产综合久久久久 | 国产成人精品免费一区二区| 亚洲综合一区二区三区| 欧美激情一区二区三区不卡 | 日韩欧美一级片| 色乱码一区二区三区88| 国产二区国产一区在线观看| 美国欧美日韩国产在线播放| 亚洲制服丝袜av| 国产精品国产自产拍高清av王其| 欧美成人高清电影在线| 精品视频色一区| 91黄色免费看| 91免费版在线看| 成人av电影免费观看| 国产一区二三区| 捆绑变态av一区二区三区| 亚洲chinese男男1069| 亚洲精品欧美激情| 亚洲人成7777| 国产精品麻豆久久久| 久久久五月婷婷| 精品久久久久久久久久久久包黑料 | av电影在线不卡| 国产大片一区二区| 国产精品亚洲专一区二区三区| 免播放器亚洲一区| 久久精品国产一区二区三区免费看| 亚洲成人综合在线| 亚洲主播在线播放| 五月天亚洲婷婷| 日韩av电影天堂| 天天操天天干天天综合网| 香蕉成人啪国产精品视频综合网 | 国产清纯在线一区二区www| 久久久久久一级片| 2020国产精品自拍| 国产欧美日本一区二区三区| 国产清纯白嫩初高生在线观看91| 国产日韩精品一区二区浪潮av| 久久久精品影视| 中文一区二区完整视频在线观看| 国产精品美女久久久久高潮| 中文字幕一区二区5566日韩| 自拍视频在线观看一区二区| 一区二区在线观看av| 亚洲综合激情另类小说区| 午夜精品免费在线| 美女脱光内衣内裤视频久久影院| 精品一区二区三区免费观看| 欧美日韩一级视频| 正在播放亚洲一区| 欧美变态凌虐bdsm| 国产亚洲一区字幕| 亚洲欧美自拍偷拍| 亚洲综合一二区| 人妖欧美一区二区| 国产精品综合一区二区三区| av福利精品导航| 欧美理论电影在线| 久久精品人人做人人综合| 日韩一区中文字幕| 亚洲风情在线资源站| 狠狠色综合播放一区二区| 成人av在线资源网| 欧美中文一区二区三区| 欧美va亚洲va在线观看蝴蝶网| 日本一区二区综合亚洲| 亚洲一区二区三区四区五区中文| 免费成人深夜小野草| 成人av资源在线观看| 制服丝袜亚洲网站| 国产精品视频一二三区 | 日韩不卡手机在线v区| 国产一区二区三区最好精华液| 91在线观看污| 精品美女一区二区| 一区二区成人在线视频| 国产一区二区免费视频| 欧美亚洲国产怡红院影院| 精品国精品国产| 亚洲制服欧美中文字幕中文字幕| 国产精品一二三四| 欧美日本免费一区二区三区| 日本一区二区在线不卡| 青娱乐精品在线视频| 色拍拍在线精品视频8848| 精品噜噜噜噜久久久久久久久试看 | 国产乱子伦一区二区三区国色天香| 色八戒一区二区三区| 久久人人爽人人爽| 午夜影院久久久| 91亚洲精品一区二区乱码| 337p粉嫩大胆噜噜噜噜噜91av | 国产精品一区一区三区| 欧美日韩在线电影| 亚洲欧洲美洲综合色网| 九一久久久久久| 欧美日韩国产成人在线91| 中文字幕日本不卡| 国产主播一区二区| 91麻豆精品国产91久久久久久 | 国产一区二区三区香蕉| 欧美丰满少妇xxxxx高潮对白| 亚洲色图清纯唯美| jiyouzz国产精品久久| 久久久久久久久免费| 男女激情视频一区| 欧美精品丝袜久久久中文字幕| |精品福利一区二区三区| 国产成人高清视频| 欧美成人性战久久| 日本视频一区二区| 欧美精选午夜久久久乱码6080| 亚洲伦理在线精品| 99久久99久久精品免费观看| 中文字幕不卡在线| 国产精品自在欧美一区| 欧美mv日韩mv国产网站| 欧美aⅴ一区二区三区视频| 欧美日韩一二三| 亚洲午夜影视影院在线观看| 在线免费不卡视频| 亚洲亚洲人成综合网络| www精品美女久久久tv| 裸体健美xxxx欧美裸体表演| 制服丝袜一区二区三区| 日本中文字幕不卡| 欧美一级精品在线| 日本怡春院一区二区| 欧美一级二级在线观看| 久久99久久久久| 精品国产免费人成电影在线观看四季| 美国十次综合导航| 337p粉嫩大胆色噜噜噜噜亚洲| 久久国产生活片100| 日韩一级免费一区| 久久国产乱子精品免费女| 精品免费日韩av| 国产成a人亚洲| 亚洲免费av高清| 欧美视频三区在线播放| 日韩成人伦理电影在线观看| 日韩一区二区免费高清| 久久精品99久久久| 久久久久久久久久看片| 国产不卡一区视频| 亚洲色图视频免费播放| 欧美三级资源在线| 久久不见久久见免费视频1| 久久色在线观看| av电影在线观看不卡| 午夜精品久久久久久久久久久| 日韩视频免费观看高清在线视频| 国内精品伊人久久久久影院对白| 欧美激情中文不卡| 在线一区二区视频| 另类小说图片综合网| 国产精品欧美综合在线| 欧洲人成人精品| 老司机精品视频在线| 国产精品久久久久aaaa樱花 | 欧美精品在线视频| 精东粉嫩av免费一区二区三区| 国产精品三级av| 欧美精品高清视频| 国内精品国产成人国产三级粉色| 中文字幕一区二区三区乱码在线| 欧美视频中文字幕| 精品亚洲aⅴ乱码一区二区三区| 中文字幕一区在线观看| 欧美精品在线一区二区| 国产成人精品www牛牛影视| 亚洲国产人成综合网站| 久久久美女毛片| 欧美性一二三区| 国产成人亚洲精品狼色在线| 亚洲自拍偷拍综合| 国产欧美一区二区三区网站 | 波多野结衣91| 另类欧美日韩国产在线| 亚洲乱码日产精品bd| 亚洲人成亚洲人成在线观看图片 | 国产一区二区三区在线观看免费视频 | 一区精品在线播放| 日韩欧美国产wwwww| 91久久人澡人人添人人爽欧美| 韩国精品免费视频| 亚洲丰满少妇videoshd| 国产精品另类一区| 日韩一区二区电影在线|