﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-liyuxia713-随笔分类-C++</title><link>http://www.cppblog.com/liyuxia713/category/10183.html</link><description>蹒跚前行者</description><language>zh-cn</language><lastBuildDate>Sun, 06 Jun 2010 18:21:37 GMT</lastBuildDate><pubDate>Sun, 06 Jun 2010 18:21:37 GMT</pubDate><ttl>60</ttl><item><title>内存管理</title><link>http://www.cppblog.com/liyuxia713/archive/2010/06/05/117211.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Sat, 05 Jun 2010 01:34:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2010/06/05/117211.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/117211.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2010/06/05/117211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/117211.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/117211.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;
<p><span><a href="http://edu.codepub.com/2009/0704/8213.php"><span><span>扩展阅读</span></span></a></span></p>
<p style="FONT-SIZE: 10pt">内存的三种分配方式：</p>
<p style="FONT-SIZE: 10pt">1．&nbsp;从静态存储区分配：此时的内存在程序编译的时候已经分配好，并且在程序的整个运行期间都存在。全局变量，static变量等在此存储。</p>
<p style="FONT-SIZE: 10pt">2．&nbsp;在栈区分配：相关代码执行时创建，执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指令集中，效率高，但容量有限。</p>
<p style="FONT-SIZE: 10pt">3．&nbsp;在堆区分配：动态分配内存。用new/malloc时开辟，delete/free时释放。生存期由用户指定，灵活。但有内存泄露等问题。</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">常见内存错误及对策</p>
<p style="FONT-SIZE: 10pt">1．&nbsp;内存分配未成功，却被使用。</p>
<p style="FONT-SIZE: 10pt">对策：使用内存之前检查是否分配成功。用p!=NULL判断。</p>
<p style="FONT-SIZE: 10pt">2．&nbsp;内存分配成功，未初始化就被使用。</p>
<p style="FONT-SIZE: 10pt">内存的缺省值没有统一的标准。大部分编译器以0作为初始值，但不完全是。</p>
<p style="FONT-SIZE: 10pt">对策：内存初始化时赋初值。</p>
<p style="FONT-SIZE: 10pt">3．&nbsp;内存操作越界。</p>
<p style="FONT-SIZE: 10pt">对策：只能是小心了。</p>
<p style="FONT-SIZE: 10pt">4．&nbsp;释放了内存，仍然使用。</p>
<p style="FONT-SIZE: 10pt">（1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用显示delete和free的野指针。</p>
<p style="FONT-SIZE: 10pt">对策：释放完内存，将指针置为NULL。</p>
<p style="FONT-SIZE: 10pt">（2）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用隐式delete和free的野指针。主要是指函数返回指向栈内存的指针或引用。</p>
<p style="FONT-SIZE: 10pt">对策：当然是不要返回就可以了。</p>
<p style="FONT-SIZE: 10pt">5．&nbsp;未释放内存，导致内存泄露。</p>
<p style="FONT-SIZE: 10pt">用new/malloc开辟了内存，没用delete/free释放.</p>
<p style="FONT-SIZE: 10pt">对策：new和delete的个数一定相同；malloc和free的个数一定相同；new[]和[]delete一定对应。<br><br><br>示例1：返回指向栈空间的指针<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;test1()<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img id=Codehighlighter1_14_59_Open_Image onclick="this.style.display='none'; Codehighlighter1_14_59_Open_Text.style.display='none'; Codehighlighter1_14_59_Closed_Image.style.display='inline'; Codehighlighter1_14_59_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_14_59_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_14_59_Closed_Text.style.display='none'; Codehighlighter1_14_59_Open_Image.style.display='inline'; Codehighlighter1_14_59_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_14_59_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_14_59_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;str[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello&nbsp;World!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;str;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;test2()<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img id=Codehighlighter1_76_120_Open_Image onclick="this.style.display='none'; Codehighlighter1_76_120_Open_Text.style.display='none'; Codehighlighter1_76_120_Closed_Image.style.display='inline'; Codehighlighter1_76_120_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_76_120_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_76_120_Closed_Text.style.display='none'; Codehighlighter1_76_120_Open_Image.style.display='inline'; Codehighlighter1_76_120_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_76_120_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_76_120_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">str&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello&nbsp;World!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;str;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;test3()<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img id=Codehighlighter1_137_189_Open_Image onclick="this.style.display='none'; Codehighlighter1_137_189_Open_Text.style.display='none'; Codehighlighter1_137_189_Closed_Image.style.display='inline'; Codehighlighter1_137_189_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_137_189_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_137_189_Closed_Text.style.display='none'; Codehighlighter1_137_189_Open_Image.style.display='inline'; Codehighlighter1_137_189_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_137_189_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_137_189_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;str[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello&nbsp;World!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;str;<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img id=Codehighlighter1_204_440_Open_Image onclick="this.style.display='none'; Codehighlighter1_204_440_Open_Text.style.display='none'; Codehighlighter1_204_440_Closed_Image.style.display='inline'; Codehighlighter1_204_440_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_204_440_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_204_440_Closed_Text.style.display='none'; Codehighlighter1_204_440_Open_Image.style.display='inline'; Codehighlighter1_204_440_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_204_440_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_204_440_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">str&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;test1();&nbsp;<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;str&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">垃圾信息</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;test2();&nbsp;<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;str&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ok<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">str[1]&nbsp;=&nbsp;'A'&nbsp;;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">error.试图修改常字符串<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">str&nbsp;=&nbsp;NULL;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">error.试图修改常字符串</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;test3();<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;str&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt; COLOR: #ff9900">输出结果：<br>乱码</p>
<p style="FONT-SIZE: 10pt; COLOR: #ff9900">Hello World!</p>
<p style="FONT-SIZE: 10pt; COLOR: #ff9900">Hello World!<br><br><span>示例2：</span><font color=#000000><span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">new</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">和</span><span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">delete</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">虽然对应，但</span><span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">delete</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">释放不成功</span></font><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_12_65_Open_Image onclick="this.style.display='none'; Codehighlighter1_12_65_Open_Text.style.display='none'; Codehighlighter1_12_65_Closed_Image.style.display='inline'; Codehighlighter1_12_65_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_12_65_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12_65_Closed_Text.style.display='none'; Codehighlighter1_12_65_Open_Image.style.display='inline'; Codehighlighter1_12_65_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_12_65_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_12_65_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ppp</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;[]p;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p class=MsoNormal style="FONT-SIZE: 10pt; MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">运行时错误。</span><span lang=EN-US><font face=Calibri>P</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">虽然是动态开辟的内存，但在第二条语句后</span><span lang=EN-US><font face=Calibri>p</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">已经指向了静态存储区上的地址，而对指向静态存储区的指针是不能用</span><span lang=EN-US><font face=Calibri>delete</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">释放的。此时不仅运行时错误，还有内存泄露。</span></p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/117211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2010-06-05 09:34 <a href="http://www.cppblog.com/liyuxia713/archive/2010/06/05/117211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sscanf</title><link>http://www.cppblog.com/liyuxia713/archive/2010/04/25/113530.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Sun, 25 Apr 2010 12:13:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2010/04/25/113530.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/113530.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2010/04/25/113530.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/113530.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/113530.html</trackback:ping><description><![CDATA[<span style="COLOR: #008000">int sscanf(const char* str, const char* format, ...)</span><br><strong>functions:</strong> Reads data from <em>str </em>and stores them according to the parameter<em> format</em> into the locations given by the additional arguments. Locations pointed by each additional argument are filled with their corresponding type of value specified in the <em>format </em>string.<br><br>In the format:<br><strong>Whitespace character:</strong> the function will read and ignore any whitespace characters which are encounterd before the next non-whitespace character. <br><strong>Non-whitespace character:</strong> except percentage signs(%): any character that is not either a whitespace character or part of a format specifier causes the function to read the next character from str, compare it to this non-whitespace character and if it matches, it is discarded and the function continues with the next character of format and str. If the character does not match, the function fails and returns.<br><strong>Return Value:</strong> <br>On success. the function returns the number of items successfully read.<br>On failure: In the case of an input failure before any data could be successfully read, EOF is returnded.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 68.5%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 583px; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">默认以空格分隔str为不同字符串,返回正确输入的变量个数&nbsp;</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_55_57_Open_Image onclick="this.style.display='none'; Codehighlighter1_55_57_Open_Text.style.display='none'; Codehighlighter1_55_57_Closed_Image.style.display='inline'; Codehighlighter1_55_57_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_55_57_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_55_57_Closed_Text.style.display='none'; Codehighlighter1_55_57_Open_Image.style.display='inline'; Codehighlighter1_55_57_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;buf1[</span><span style="COLOR: #000000">512</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_55_57_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_55_57_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;cout&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;sscanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">abc&nbsp;def&nbsp;gh</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,buf1)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">1</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;buf1&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">abc&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">可以使多个一起存入&nbsp;</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_189_191_Open_Image onclick="this.style.display='none'; Codehighlighter1_189_191_Open_Text.style.display='none'; Codehighlighter1_189_191_Closed_Image.style.display='inline'; Codehighlighter1_189_191_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_189_191_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_189_191_Closed_Text.style.display='none'; Codehighlighter1_189_191_Open_Image.style.display='inline'; Codehighlighter1_189_191_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;buf2[</span><span style="COLOR: #000000">512</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_189_191_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_189_191_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_214_216_Open_Image onclick="this.style.display='none'; Codehighlighter1_214_216_Open_Text.style.display='none'; Codehighlighter1_214_216_Closed_Image.style.display='inline'; Codehighlighter1_214_216_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_214_216_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_214_216_Closed_Text.style.display='none'; Codehighlighter1_214_216_Open_Image.style.display='inline'; Codehighlighter1_214_216_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;buf3[</span><span style="COLOR: #000000">512</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_214_216_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_214_216_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;sscanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">abc&nbsp;2def&nbsp;gh</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s%s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,buf2,buf3)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">2</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;buf2&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">abc&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;buf3&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">2def<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">空格或format格式以外的字符如果匹配则与前一个字符串一起输入，否则停止，退出&nbsp;</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_416_418_Open_Image onclick="this.style.display='none'; Codehighlighter1_416_418_Open_Text.style.display='none'; Codehighlighter1_416_418_Closed_Image.style.display='inline'; Codehighlighter1_416_418_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_416_418_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_416_418_Closed_Text.style.display='none'; Codehighlighter1_416_418_Open_Image.style.display='inline'; Codehighlighter1_416_418_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;buf4[</span><span style="COLOR: #000000">512</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_416_418_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_416_418_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_441_443_Open_Image onclick="this.style.display='none'; Codehighlighter1_441_443_Open_Text.style.display='none'; Codehighlighter1_441_443_Closed_Image.style.display='inline'; Codehighlighter1_441_443_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_441_443_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_441_443_Closed_Text.style.display='none'; Codehighlighter1_441_443_Open_Image.style.display='inline'; Codehighlighter1_441_443_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;buf5[</span><span style="COLOR: #000000">512</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_441_443_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_441_443_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;sscanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">abc&nbsp;2def&nbsp;gh</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s,%s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,buf4,buf5)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">1&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;buf4&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">abc</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;buf5&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">nothing</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_599_601_Open_Image onclick="this.style.display='none'; Codehighlighter1_599_601_Open_Text.style.display='none'; Codehighlighter1_599_601_Closed_Image.style.display='inline'; Codehighlighter1_599_601_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_599_601_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_599_601_Closed_Text.style.display='none'; Codehighlighter1_599_601_Open_Image.style.display='inline'; Codehighlighter1_599_601_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;buf6[</span><span style="COLOR: #000000">512</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_599_601_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_599_601_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_624_626_Open_Image onclick="this.style.display='none'; Codehighlighter1_624_626_Open_Text.style.display='none'; Codehighlighter1_624_626_Closed_Image.style.display='inline'; Codehighlighter1_624_626_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_624_626_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_624_626_Closed_Text.style.display='none'; Codehighlighter1_624_626_Open_Image.style.display='inline'; Codehighlighter1_624_626_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;buf7[</span><span style="COLOR: #000000">512</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_624_626_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_624_626_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">注意两个%s之间的空格不可少&nbsp;&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;sscanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">abc&nbsp;2def&nbsp;gh</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s&nbsp;2%s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,buf6,buf7);&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;buf6&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">abc</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;buf7&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">def&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">当然不只是字符串形式的，其他也都可以&nbsp;</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_813_815_Open_Image onclick="this.style.display='none'; Codehighlighter1_813_815_Open_Text.style.display='none'; Codehighlighter1_813_815_Closed_Image.style.display='inline'; Codehighlighter1_813_815_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_813_815_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_813_815_Closed_Text.style.display='none'; Codehighlighter1_813_815_Open_Image.style.display='inline'; Codehighlighter1_813_815_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;buf8[</span><span style="COLOR: #000000">512</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_813_815_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_813_815_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;sscanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">abc&nbsp;2def&nbsp;gh</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%*s&nbsp;%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">1</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">2<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Failure&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;sscanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">abc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">0</span></div>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/113530.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2010-04-25 20:13 <a href="http://www.cppblog.com/liyuxia713/archive/2010/04/25/113530.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sprintf</title><link>http://www.cppblog.com/liyuxia713/archive/2010/04/25/113525.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Sun, 25 Apr 2010 11:23:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2010/04/25/113525.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/113525.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2010/04/25/113525.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/113525.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/113525.html</trackback:ping><description><![CDATA[sprintf:&nbsp; <span><a href="http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/">http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/</a><br>&nbsp;
<p><span>Portotype:&nbsp; int printf(char* str, const char* format, parameters);</span></p>
<p><span>Writes into the array pointed by <em>str</em> a C string consisting on a sequence of data formatted as the <em>format</em> argument specifies. After the<em> format</em> parameter, the function expects <u>at least </u>as many additional arguments as specified in<em> format</em>.</span></p>
<p><span>This function behaves exactly as <em>printf </em>does, but writing its result to a string instead of <em>stdout</em>. The size of the array passed as<em> str </em>should be enough to contain the entire formatted string .</span></p>
<p><span>Return value: </span></p>
<p><span>On success, the total number of characters written is returned. This count does not include the additional null-character automatically appended at the end of the string.</span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 64.92%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 167px; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Success<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">The&nbsp;size&nbsp;of&nbsp;str&nbsp;is&nbsp;long&nbsp;enough<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">the&nbsp;number&nbsp;of&nbsp;additional&nbsp;number&nbsp;match&nbsp;with&nbsp;the&nbsp;format</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;size&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">25</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">str&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[size];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br>&nbsp;&nbsp; //same as int flag1 = sprintf(str,"%s is written to str.","Test","tEST");<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;flag1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sprintf(str,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s&nbsp;is&nbsp;written&nbsp;to&nbsp;str.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Console:&nbsp;23-Test&nbsp;is&nbsp;written&nbsp;to&nbsp;str</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;flag1&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;str&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;</span></div>
</span><span>On failure, a negative number is returned.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 65.12%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 104px; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Failure1<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">additional&nbsp;arguments&nbsp;numbers&nbsp;is&nbsp;less&nbsp;than&nbsp;specified&nbsp;is&nbsp;format<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">the&nbsp;second&nbsp;%s&nbsp;transmited&nbsp;as&nbsp;unrecognizable&nbsp;words</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;size&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">25</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">str&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[size];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;flag2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sprintf(str,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s&nbsp;%s&nbsp;tttttttttttt</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Console:&nbsp;19--Test&nbsp;@&nbsp;tttttttttttt</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;flag2&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;str&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;</span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 65.55%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 70px; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Failure2:the size of str is not&nbsp;long enough<br>&nbsp;&nbsp; //&nbsp;在dev&nbsp;c++不能运行，vc6.0沒有问题</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;size&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">25</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">str&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[size];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;flag3&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sprintf(str,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s&nbsp;jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">VC6.0&nbsp;Console:&nbsp;Test&nbsp;jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Dev&nbsp;c++:&nbsp;Console:&nbsp;the&nbsp;same&nbsp;as&nbsp;vc6.0&nbsp;but&nbsp;throws&nbsp;an&nbsp;cannot&nbsp;read&nbsp;memory&nbsp;exception</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;flag3&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;str&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;</span></div>
<br><span style="COLOR: red">没有测试出什么时候出错返回负值呢！！谁给我一个例子？</span></span> 
<img src ="http://www.cppblog.com/liyuxia713/aggbug/113525.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2010-04-25 19:23 <a href="http://www.cppblog.com/liyuxia713/archive/2010/04/25/113525.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>指针学习4--合成析构函数做了什么</title><link>http://www.cppblog.com/liyuxia713/archive/2010/04/19/112952.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Mon, 19 Apr 2010 00:49:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2010/04/19/112952.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/112952.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2010/04/19/112952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/112952.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/112952.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: 微软雅黑">与复制构造函数和复制操作符不同，编译器总是提供合成析构函数。<br><br>合成析构函数做什么？<br>按对象创建时的逆序撤销每个非static成员，包括指针成员。<br>只不过不删除指针成员所指向的对象。</span>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/112952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2010-04-19 08:49 <a href="http://www.cppblog.com/liyuxia713/archive/2010/04/19/112952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>指针学习3----何时需要自行定义析构函数</title><link>http://www.cppblog.com/liyuxia713/archive/2010/04/18/112928.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Sun, 18 Apr 2010 11:59:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2010/04/18/112928.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/112928.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2010/04/18/112928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/112928.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/112928.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: courier new">当在类的构造函数体中申请了资源(如内存空间)，需要在对象被销毁时进行释放时。
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Test<br><img id=Codehighlighter1_11_148_Open_Image onclick="this.style.display='none'; Codehighlighter1_11_148_Open_Text.style.display='none'; Codehighlighter1_11_148_Closed_Image.style.display='inline'; Codehighlighter1_11_148_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_11_148_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_11_148_Closed_Text.style.display='none'; Codehighlighter1_11_148_Open_Image.style.display='inline'; Codehighlighter1_11_148_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_11_148_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_11_148_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Test(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;ptr)<br><img id=Codehighlighter1_45_97_Open_Image onclick="this.style.display='none'; Codehighlighter1_45_97_Open_Text.style.display='none'; Codehighlighter1_45_97_Closed_Image.style.display='inline'; Codehighlighter1_45_97_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_45_97_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_45_97_Closed_Text.style.display='none'; Codehighlighter1_45_97_Open_Image.style.display='inline'; Codehighlighter1_45_97_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_45_97_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_45_97_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(ptr)<br><img id=Codehighlighter1_59_93_Open_Image onclick="this.style.display='none'; Codehighlighter1_59_93_Open_Text.style.display='none'; Codehighlighter1_59_93_Closed_Image.style.display='inline'; Codehighlighter1_59_93_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_59_93_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_59_93_Closed_Text.style.display='none'; Codehighlighter1_59_93_Open_Image.style.display='inline'; Codehighlighter1_59_93_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_59_93_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_59_93_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[strlen(ptr)];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Test()<br><img id=Codehighlighter1_109_126_Open_Image onclick="this.style.display='none'; Codehighlighter1_109_126_Open_Text.style.display='none'; Codehighlighter1_109_126_Closed_Image.style.display='inline'; Codehighlighter1_109_126_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_109_126_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_109_126_Closed_Text.style.display='none'; Codehighlighter1_109_126_Open_Image.style.display='inline'; Codehighlighter1_109_126_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_109_126_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_109_126_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;p;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;p;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;</span></div>
</span>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/112928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2010-04-18 19:59 <a href="http://www.cppblog.com/liyuxia713/archive/2010/04/18/112928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>指针学习2--内存泄露</title><link>http://www.cppblog.com/liyuxia713/archive/2010/04/18/112897.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Sun, 18 Apr 2010 04:06:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2010/04/18/112897.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/112897.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2010/04/18/112897.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/112897.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/112897.html</trackback:ping><description><![CDATA[内存泄露的情形<br>：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; DISPLAY: inline; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 55.31%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 508px; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Stu<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_53_309_Open_Image onclick="this.style.display='none'; Codehighlighter1_53_309_Open_Text.style.display='none'; Codehighlighter1_53_309_Closed_Image.style.display='inline'; Codehighlighter1_53_309_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_53_309_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_53_309_Closed_Text.style.display='none'; Codehighlighter1_53_309_Open_Image.style.display='inline'; Codehighlighter1_53_309_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_53_309_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_53_309_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stu(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m):var(m)<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img id=Codehighlighter1_96_189_Open_Image onclick="this.style.display='none'; Codehighlighter1_96_189_Open_Text.style.display='none'; Codehighlighter1_96_189_Closed_Image.style.display='inline'; Codehighlighter1_96_189_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_96_189_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_96_189_Closed_Text.style.display='none'; Codehighlighter1_96_189_Open_Image.style.display='inline'; Codehighlighter1_96_189_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_96_189_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_96_189_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;var&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;constructor&nbsp;called.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img id=Codehighlighter1_214_261_Open_Image onclick="this.style.display='none'; Codehighlighter1_214_261_Open_Text.style.display='none'; Codehighlighter1_214_261_Closed_Image.style.display='inline'; Codehighlighter1_214_261_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_214_261_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_214_261_Closed_Text.style.display='none'; Codehighlighter1_214_261_Open_Image.style.display='inline'; Codehighlighter1_214_261_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Stu()&nbsp;</span><span id=Codehighlighter1_214_261_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_214_261_Open_Text><span style="COLOR: #000000">{&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;var&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;destructor&nbsp;called.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;var;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img id=Codehighlighter1_325_448_Open_Image onclick="this.style.display='none'; Codehighlighter1_325_448_Open_Text.style.display='none'; Codehighlighter1_325_448_Closed_Image.style.display='inline'; Codehighlighter1_325_448_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_325_448_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_325_448_Closed_Text.style.display='none'; Codehighlighter1_325_448_Open_Image.style.display='inline'; Codehighlighter1_325_448_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_325_448_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_325_448_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Stu&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">a&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Stu(</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">);&nbsp;<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Stu&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">b&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Stu(</span><span style="COLOR: #000000">30</span><span style="COLOR: #000000">);&nbsp;&nbsp;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;b;<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">or&nbsp;其他隐藏异常<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">导致内存泄露</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;a;<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img style="BORDER-LEFT-COLOR: #00ff00; BORDER-BOTTOM-COLOR: #00ff00; BORDER-TOP-COLOR: #00ff00; BORDER-RIGHT-COLOR: #00ff00" height=115 alt="" src="http://www.cppblog.com/images/cppblog_com/liyuxia713/5.jpg" width=297 border=1> 
<img src ="http://www.cppblog.com/liyuxia713/aggbug/112897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2010-04-18 12:06 <a href="http://www.cppblog.com/liyuxia713/archive/2010/04/18/112897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>指针学习1--new &amp;delete &amp; destructor</title><link>http://www.cppblog.com/liyuxia713/archive/2010/04/18/112892.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Sun, 18 Apr 2010 02:58:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2010/04/18/112892.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/112892.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2010/04/18/112892.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/112892.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/112892.html</trackback:ping><description><![CDATA[<p><span style="COLOR: #ff00ff"><strong>1. 一般指针的new&amp;delete</strong></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">对于指针</span><span lang=EN-US><font face=Calibri>a,delete a</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">之后，指针</span><span lang=EN-US><font face=Calibri>a </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的地址仍然是原来的地址(并不是NULL)，只不过所指向的对象被释放了，此时指针存放的值为随机的，由编译器确定。<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; DISPLAY: inline; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 48.43%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 257px; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">a&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">after&nbsp;new&nbsp;:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">*a&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">a&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;a;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">after&nbsp;delete:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(a&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;NULL)<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img id=Codehighlighter1_196_245_Open_Image onclick="this.style.display='none'; Codehighlighter1_196_245_Open_Text.style.display='none'; Codehighlighter1_196_245_Closed_Image.style.display='inline'; Codehighlighter1_196_245_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_196_245_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_196_245_Closed_Text.style.display='none'; Codehighlighter1_196_245_Open_Image.style.display='inline'; Codehighlighter1_196_245_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_196_245_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_196_245_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a&nbsp;is&nbsp;null&nbsp;after&nbsp;delete</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img id=Codehighlighter1_259_313_Open_Image onclick="this.style.display='none'; Codehighlighter1_259_313_Open_Text.style.display='none'; Codehighlighter1_259_313_Closed_Image.style.display='inline'; Codehighlighter1_259_313_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_259_313_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_259_313_Closed_Text.style.display='none'; Codehighlighter1_259_313_Open_Image.style.display='inline'; Codehighlighter1_259_313_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_259_313_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_259_313_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;a&nbsp;is&nbsp;not&nbsp;null&nbsp;after&nbsp;delete</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">*a&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">a&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;</span></div>
<img style="DISPLAY: inline; BORDER-LEFT-COLOR: #00ff00; BORDER-BOTTOM-COLOR: #00ff00; BORDER-TOP-COLOR: #00ff00; BORDER-RIGHT-COLOR: #00ff00" height=107 alt="" src="http://www.cppblog.com/images/cppblog_com/liyuxia713/3.jpg" width=232 border=2>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 48.41%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 52px; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">好的编程习惯</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">delete&nbsp;a;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>a&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;</span></div>
<br></span><font style="BACKGROUND-COLOR: #00ffff" face=宋体>常规方法创建的对象，当实际对象（而不是对象的引用）超出作用域时，才会运行析构函数<br>动态方法创建的对象，当删除指向动态分配对象的指针时，才会运行析构函数。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><br><br><span style="COLOR: #ff00ff"><strong>2. 一般类对象的声明与初始化：不用new也可以定义类对象（区别于java），默认调析构函数<br></strong>注：为方便简单演示，并没有遵循三法则</span><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; DISPLAY: inline; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 47.39%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 540px; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Stu<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img id=Codehighlighter1_10_280_Open_Image onclick="this.style.display='none'; Codehighlighter1_10_280_Open_Text.style.display='none'; Codehighlighter1_10_280_Closed_Image.style.display='inline'; Codehighlighter1_10_280_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_10_280_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_10_280_Closed_Text.style.display='none'; Codehighlighter1_10_280_Open_Image.style.display='inline'; Codehighlighter1_10_280_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_10_280_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_10_280_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stu(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m):var(m)<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_60_157_Open_Image onclick="this.style.display='none'; Codehighlighter1_60_157_Open_Text.style.display='none'; Codehighlighter1_60_157_Closed_Image.style.display='inline'; Codehighlighter1_60_157_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_60_157_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_60_157_Closed_Text.style.display='none'; Codehighlighter1_60_157_Open_Image.style.display='inline'; Codehighlighter1_60_157_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_60_157_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_60_157_Open_Text><span style="COLOR: #000000">{&nbsp;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;m;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">constructor&nbsp;called.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img id=Codehighlighter1_182_229_Open_Image onclick="this.style.display='none'; Codehighlighter1_182_229_Open_Text.style.display='none'; Codehighlighter1_182_229_Closed_Image.style.display='inline'; Codehighlighter1_182_229_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_182_229_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_182_229_Closed_Text.style.display='none'; Codehighlighter1_182_229_Open_Image.style.display='inline'; Codehighlighter1_182_229_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Stu()&nbsp;</span><span id=Codehighlighter1_182_229_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_182_229_Open_Text><span style="COLOR: #000000">{&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;var&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;destructor&nbsp;called.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;var;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;func()<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img id=Codehighlighter1_296_521_Open_Image onclick="this.style.display='none'; Codehighlighter1_296_521_Open_Text.style.display='none'; Codehighlighter1_296_521_Closed_Image.style.display='inline'; Codehighlighter1_296_521_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_296_521_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_296_521_Closed_Text.style.display='none'; Codehighlighter1_296_521_Open_Image.style.display='inline'; Codehighlighter1_296_521_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_296_521_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_296_521_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">调用构造函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stu&nbsp;a(</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">调用默认复制构造函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stu&nbsp;b(a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">等价于Stu&nbsp;temp(b);&nbsp;Stu&nbsp;b(temp);&nbsp;&nbsp;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">所以有调用构造函数的过程</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stu&nbsp;c&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">30</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//都是用隐式方式定义的，所以不用delete,自动调用析构函数<br></span><span style="COLOR: #008000">24 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //注意析构的顺序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img id=Codehighlighter1_535_564_Open_Image onclick="this.style.display='none'; Codehighlighter1_535_564_Open_Text.style.display='none'; Codehighlighter1_535_564_Closed_Image.style.display='inline'; Codehighlighter1_535_564_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_535_564_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_535_564_Closed_Text.style.display='none'; Codehighlighter1_535_564_Open_Image.style.display='inline'; Codehighlighter1_535_564_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_535_564_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_535_564_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;func();&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img style="DISPLAY: inline; BORDER-LEFT-COLOR: #00ff00; BORDER-BOTTOM-COLOR: #00ff00; BORDER-TOP-COLOR: #00ff00; BORDER-RIGHT-COLOR: #00ff00" height=109 alt="" src="http://www.cppblog.com/images/cppblog_com/liyuxia713/6.jpg" width=238 border=2><br>这里有一个需要注意的地方，就是如果func里面的代码是直接写在main里的则不一定调用析构函数&nbsp;，由编译器决定。<br>上面是dev c++, 下面是vc6.0的运行结果<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; DISPLAY: inline; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 46.95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 291px; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img id=Codehighlighter1_12_258_Open_Image onclick="this.style.display='none'; Codehighlighter1_12_258_Open_Text.style.display='none'; Codehighlighter1_12_258_Closed_Image.style.display='inline'; Codehighlighter1_12_258_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_12_258_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12_258_Closed_Text.style.display='none'; Codehighlighter1_12_258_Open_Image.style.display='inline'; Codehighlighter1_12_258_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_12_258_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_12_258_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">{<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">调用构造函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stu&nbsp;a(</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">调用默认复制构造函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stu&nbsp;b(a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">等价于Stu&nbsp;temp(b);&nbsp;Stu&nbsp;b(temp);&nbsp;&nbsp;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">所以有调用构造函数的过程</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stu&nbsp;c&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">30</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">new出来的指针对象，必须显示delete,如a,b<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">类对象结束局部范围后会自动调用析构函数&nbsp;如c&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">}</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img style="BORDER-LEFT-COLOR: #00ff00; BORDER-BOTTOM-COLOR: #00ff00; BORDER-TOP-COLOR: #00ff00; BORDER-RIGHT-COLOR: #00ff00" height=229 alt="" src="http://www.cppblog.com/images/cppblog_com/liyuxia713/7.jpg" width=288 border=2><br><br><span style="COLOR: #ff00ff"><strong>3. 用new定义类对象,必须delete<br></strong></span>动态分配的对象只有在指向该对象的指针被删除时才撤销。如果没有删除指向动态对象的指针，则不会运行该对象的析构函数，对象则一直存在，从而导致内存泄露。<br>常规方法创建的对象，当实际对象（而不是对象的引用）超出作用域时，才会运行析构函数<br>动态方法创建的对象，当删除指向动态分配对象的指针时，才会运行析构函数。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; DISPLAY: inline; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 44.83%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 569px; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Stu<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img id=Codehighlighter1_10_280_Open_Image onclick="this.style.display='none'; Codehighlighter1_10_280_Open_Text.style.display='none'; Codehighlighter1_10_280_Closed_Image.style.display='inline'; Codehighlighter1_10_280_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_10_280_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_10_280_Closed_Text.style.display='none'; Codehighlighter1_10_280_Open_Image.style.display='inline'; Codehighlighter1_10_280_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_10_280_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_10_280_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stu(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m):var(m)<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_60_157_Open_Image onclick="this.style.display='none'; Codehighlighter1_60_157_Open_Text.style.display='none'; Codehighlighter1_60_157_Closed_Image.style.display='inline'; Codehighlighter1_60_157_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_60_157_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_60_157_Closed_Text.style.display='none'; Codehighlighter1_60_157_Open_Image.style.display='inline'; Codehighlighter1_60_157_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_60_157_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_60_157_Open_Text><span style="COLOR: #000000">{&nbsp;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;m;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">constructor&nbsp;called.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img id=Codehighlighter1_182_229_Open_Image onclick="this.style.display='none'; Codehighlighter1_182_229_Open_Text.style.display='none'; Codehighlighter1_182_229_Closed_Image.style.display='inline'; Codehighlighter1_182_229_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_182_229_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_182_229_Closed_Text.style.display='none'; Codehighlighter1_182_229_Open_Image.style.display='inline'; Codehighlighter1_182_229_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Stu()&nbsp;</span><span id=Codehighlighter1_182_229_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_182_229_Open_Text><span style="COLOR: #000000">{&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;var&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;destructor&nbsp;called.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;var;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;func()<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img id=Codehighlighter1_296_583_Open_Image onclick="this.style.display='none'; Codehighlighter1_296_583_Open_Text.style.display='none'; Codehighlighter1_296_583_Closed_Image.style.display='inline'; Codehighlighter1_296_583_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_296_583_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_296_583_Closed_Text.style.display='none'; Codehighlighter1_296_583_Open_Image.style.display='inline'; Codehighlighter1_296_583_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_296_583_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_296_583_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">调用构造函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stu</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Stu(</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">调用默认复制构造函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stu</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Stu(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">等价于Stu&nbsp;temp&nbsp;=&nbsp;new&nbsp;Stu(30);&nbsp;Stu&nbsp;b(temp);&nbsp;&nbsp;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">所以有调用构造函数的过程</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stu&nbsp;c&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">30</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">new出来的指针对象，必须显示delete,如a,b<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">类对象结束局部范围后会自动调用析构函数&nbsp;如c</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;a;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;b;<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img id=Codehighlighter1_597_626_Open_Image onclick="this.style.display='none'; Codehighlighter1_597_626_Open_Text.style.display='none'; Codehighlighter1_597_626_Closed_Image.style.display='inline'; Codehighlighter1_597_626_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_597_626_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_597_626_Closed_Text.style.display='none'; Codehighlighter1_597_626_Open_Image.style.display='inline'; Codehighlighter1_597_626_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_597_626_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_597_626_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;func();&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img style="DISPLAY: inline; BORDER-LEFT-COLOR: #00ff00; BORDER-BOTTOM-COLOR: #00ff00; BORDER-TOP-COLOR: #00ff00; BORDER-RIGHT-COLOR: #00ff00" height=144 alt="" src="http://www.cppblog.com/images/cppblog_com/liyuxia713/4.jpg" width=308 border=1> 
<img src ="http://www.cppblog.com/liyuxia713/aggbug/112892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2010-04-18 10:58 <a href="http://www.cppblog.com/liyuxia713/archive/2010/04/18/112892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>宏与内联(inline)的区别(转载)</title><link>http://www.cppblog.com/liyuxia713/archive/2010/03/04/108897.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Thu, 04 Mar 2010 12:22:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2010/03/04/108897.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/108897.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2010/03/04/108897.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/108897.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/108897.html</trackback:ping><description><![CDATA[<p>先转载下人家总结的宏和普通函数调用的区别：<br>(1)、宏只做简单的字符串替换，函数是参数传递，所以必然有参数类型检查(支持各种类型，而不是只有字符串)。<br>(2)、宏不经计算而直接替换参数，函数调用则是将参数表达式求值再传递给形参。<br>(3)、宏在编译前进行，即先替换再编译。而函数是编译后，在执行时才调用的。宏占编译时间，而函数占执行时间。<br>(4)、宏参数不占空间，因为只做字符串替换，而函数调用时参数传递是变量之间的传递，形参作为局部变量占内存空间。<br>(5)、函数调用需要保留现场，然后转入调用函数执行，执行完毕再返回主调函数，这些耗费在宏中是没有的。</p>
<p><br>使用宏和内联函数都可以节省在函数调用方面的时间和空间开销。二者都是为了提高效率，但是却有着显著的区别：<br>(1)、在使用时，宏只做简单的预处理器符号表(字符串)中的简单替换。而内联函数可以进行参数类型检查，且具有返回值(也能被强制转换为可转换的合适类型)。<br>(2)、内联函数首先是函数，函数的许多性质都适用于内联函数(如内联函数可以重载)。<br>(3)、内联函数可以作为某个类的成员函数，这样可以使用类的保护成员和私有成员。而当一个表达式涉及到类保护成员或私有成员时，宏就不能实现了(无法将this指针放在合适位置)。</p>
<p><br>可以用内联函数完全替代宏。<br>但是在使用内联函数时也要注意：作为内联函数，函数体必须十分简单，不能包含循环，条件，选择等复杂结构，否则不能作为内联函数。<br>实际上，编译器的优化系统会自动将一些简单函数变成内联函数。而一些复杂的函数，即使指定为内联，编译器也会自动当作普通函数。</p>
<p>&nbsp;</p>
<p>文章出处：DIY部落(<a href="http://www.diybl.com/course/3_program/c++/cppxl/20081216/154041.html">http://www.diybl.com/course/3_program/c++/cppxl/20081216/154041.html</a>)</p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/108897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2010-03-04 20:22 <a href="http://www.cppblog.com/liyuxia713/archive/2010/03/04/108897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>随机数的生成</title><link>http://www.cppblog.com/liyuxia713/archive/2010/01/21/106136.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Thu, 21 Jan 2010 07:37:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2010/01/21/106136.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/106136.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2010/01/21/106136.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/106136.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/106136.html</trackback:ping><description><![CDATA[<br>rand() 可获得伪随机数。但是仅仅这样写的话，同一段代码每次运行程序获得的随机数相同。<br><br>因为在调用rand()前自动调用了srand(1); 这条语句。 只有当srand()的形参是变化的时每次运行获得的随机数才不同。<br><br>用什么样的随时变化的参数呢？ 用time(NULL),&nbsp; 即srand((unsigned)time(NULL)); rand(); 这样每次运行得到的随机数不同。<br><br>如何获得某个区间的随机数？<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---- 如果是区间[0,n),&nbsp;&nbsp; rand()%n 就可以了<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---- 如果是区间[m,n),&nbsp; rand()%n+m 就可以了<br>&nbsp;&nbsp;&nbsp;&nbsp; ----如果是区[0,1), rand()/double(RAND_MAX) 就可以可以了。(RAND_MAX在cstdlib里有定义)<br><br>这里有更详细的介绍：<br><a href="http://blog.csdn.net/zhoubl668/archive/2009/01/04/3704604.aspx">http://blog.csdn.net/zhoubl668/archive/2009/01/04/3704604.aspx</a> 
<img src ="http://www.cppblog.com/liyuxia713/aggbug/106136.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2010-01-21 15:37 <a href="http://www.cppblog.com/liyuxia713/archive/2010/01/21/106136.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类成员函数继承（virtual、非virtual）</title><link>http://www.cppblog.com/liyuxia713/archive/2010/01/08/105170.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Fri, 08 Jan 2010 08:30:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2010/01/08/105170.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/105170.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2010/01/08/105170.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/105170.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/105170.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <br>★ 对于父类函数（virtual、非virtual），如果子类没有同名函数，则正常继承<br><br>★ 对于父类函数（virtual、非virtual），如果子类有同名函数，无同型函数，则不能调用父类函数<br><br>★ 对于父类函数（virtual、非virtual），如果有同型函数：<br><br>----非virtual函数由指针类型决定调用哪个<br><br>----virtual函数由指针指向的对象决定调用哪个（运行时决定）<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/liyuxia713/archive/2010/01/08/105170.html'>阅读全文</a><img src ="http://www.cppblog.com/liyuxia713/aggbug/105170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2010-01-08 16:30 <a href="http://www.cppblog.com/liyuxia713/archive/2010/01/08/105170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类static成员</title><link>http://www.cppblog.com/liyuxia713/archive/2010/01/08/105152.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Fri, 08 Jan 2010 04:22:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2010/01/08/105152.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/105152.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2010/01/08/105152.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/105152.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/105152.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>类</span><span>static</span><span>成员引进：有时特定类的全体对象需要访问一个全局对象。</span></p>
<p>&nbsp;</p>
<p><span>★</span><span>为什么用</span><span>static</span><span>成员而不是全局对象？</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>---- static</span><span>对象名字在类作用域中，可以有效避免命名冲突，并且清晰显示程序意图。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>---- </span><span>可以实施封装（</span><span>static</span><span>成员可以定义为</span><span>private</span><span>，而全局对象不可以）</span></p>
<p>&nbsp;</p>
<p><span>★</span><span> </span><span>如何调用？</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>---- class A a;&nbsp;A::static_mem;&nbsp;a.static_mem;</span></p>
<p>&nbsp;</p>
<p><span>★</span><span> </span><span>声明和定义</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>---- static</span><span>成员函数在类定义体内部外部定义均可。在类定义体外定义时不加（不可以加）</span><span>static</span><span>修饰。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>---- static</span><span>数据成员必须在类定义体外部定义（正好一次）</span><span>(</span><span>在类定义体外声明并定义</span><span>)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>class A{public : static int n;} int A::n = 10;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>---- const static</span><span>数据成员可以（也可以不）在类定义内初始化，但必须在类定义体外部重新声明（不可以加</span><span>static</span><span>修饰符，不可以赋初值）</span></p>
<p>&nbsp;</p>
<p><span>★</span><span> </span><span>static</span><span>数据成员其他特性：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>----</span><span>一般地，在类的内部不能有该类类型的变量（或函数形参），最多只能有该类类型的指针或引用做变量类型（或函数形参）</span><span>. &nbsp;static</span><span>数据成员则不受这个限制。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---- </span><span>类的</span><span>static</span><span>数据成员可以作为函数默认实参&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---- static成员的继承：如果基类有static成员，则整个继承层次中只有一个这样的成员。每个static成员总是只有一个实例。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstdlib</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;A<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img id=Codehighlighter1_72_604_Open_Image onclick="this.style.display='none'; Codehighlighter1_72_604_Open_Text.style.display='none'; Codehighlighter1_72_604_Closed_Image.style.display='inline'; Codehighlighter1_72_604_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_72_604_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_72_604_Closed_Text.style.display='none'; Codehighlighter1_72_604_Open_Image.style.display='inline'; Codehighlighter1_72_604_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_72_604_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_72_604_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">重载输出操作符&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">(ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">out</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;A</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a)<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id=Codehighlighter1_155_213_Open_Image onclick="this.style.display='none'; Codehighlighter1_155_213_Open_Text.style.display='none'; Codehighlighter1_155_213_Closed_Image.style.display='inline'; Codehighlighter1_155_213_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_155_213_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_155_213_Closed_Text.style.display='none'; Codehighlighter1_155_213_Open_Image.style.display='inline'; Codehighlighter1_155_213_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_155_213_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_155_213_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">out</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;a.m;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">out</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m&nbsp;;<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img id=Codehighlighter1_273_281_Open_Image onclick="this.style.display='none'; Codehighlighter1_273_281_Open_Text.style.display='none'; Codehighlighter1_273_281_Closed_Image.style.display='inline'; Codehighlighter1_273_281_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_273_281_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_273_281_Closed_Text.style.display='none'; Codehighlighter1_273_281_Open_Image.style.display='inline'; Codehighlighter1_273_281_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i)&nbsp;</span><span id=Codehighlighter1_273_281_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_273_281_Open_Text><span style="COLOR: #000000">{&nbsp;m&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;A&nbsp;a;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">类可以有该类类型的static成员<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">A&nbsp;a1;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">error.&nbsp;类不可以有普通的该类类型的成员&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img id=Codehighlighter1_450_469_Open_Image onclick="this.style.display='none'; Codehighlighter1_450_469_Open_Text.style.display='none'; Codehighlighter1_450_469_Closed_Image.style.display='inline'; Codehighlighter1_450_469_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_450_469_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_450_469_Closed_Text.style.display='none'; Codehighlighter1_450_469_Open_Image.style.display='inline'; Codehighlighter1_450_469_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;func(A&nbsp;a)&nbsp;</span><span id=Codehighlighter1_450_469_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_450_469_Open_Text><span style="COLOR: #000000">{cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">类类型可以作为该类static函数的形参&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">static&nbsp;数据成员可以作为类成员函数的默认实参&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">29</span><span style="COLOR: #008000"><img id=Codehighlighter1_577_598_Open_Image onclick="this.style.display='none'; Codehighlighter1_577_598_Open_Text.style.display='none'; Codehighlighter1_577_598_Closed_Image.style.display='inline'; Codehighlighter1_577_598_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_577_598_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_577_598_Closed_Text.style.display='none'; Codehighlighter1_577_598_Open_Image.style.display='inline'; Codehighlighter1_577_598_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;func2(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;n)&nbsp;</span><span id=Codehighlighter1_577_598_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_577_598_Open_Text><span style="COLOR: #000000">{&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">i&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;A::n&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>A&nbsp;A::a(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img id=Codehighlighter1_646_807_Open_Image onclick="this.style.display='none'; Codehighlighter1_646_807_Open_Text.style.display='none'; Codehighlighter1_646_807_Closed_Image.style.display='inline'; Codehighlighter1_646_807_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_646_807_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_646_807_Closed_Text.style.display='none'; Codehighlighter1_646_807_Open_Image.style.display='inline'; Codehighlighter1_646_807_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_646_807_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_646_807_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;A::n&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">10</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">38</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;A::a&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">1</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">39</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;a2(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">);&nbsp;<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;A::func(a2);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">3</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">42</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;A::func2();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">100</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">43</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">&nbsp;</span></div>
<p><br></span></p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/105152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2010-01-08 12:22 <a href="http://www.cppblog.com/liyuxia713/archive/2010/01/08/105152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入理解strcpy，strncpy</title><link>http://www.cppblog.com/liyuxia713/archive/2009/04/26/81155.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Sun, 26 Apr 2009 12:59:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/04/26/81155.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/81155.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/04/26/81155.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/81155.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/81155.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 用strcpy和strncpy时的一些疑问答疑，含两个函数的源代码。&nbsp;&nbsp;<a href='http://www.cppblog.com/liyuxia713/archive/2009/04/26/81155.html'>阅读全文</a><img src ="http://www.cppblog.com/liyuxia713/aggbug/81155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-04-26 20:59 <a href="http://www.cppblog.com/liyuxia713/archive/2009/04/26/81155.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sizeof：（含位域）结构体内存对齐，压缩存储</title><link>http://www.cppblog.com/liyuxia713/archive/2009/04/25/80918.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Sat, 25 Apr 2009 03:33:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/04/25/80918.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/80918.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/04/25/80918.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/80918.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/80918.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 较全面分析sizeof：<br>1. 一些基本类型的vc6 sizeof结果<br>2. 结构体的内存对齐<br>3. 含位域的结构体介绍<br>4. 含位域的结构体的内存对齐（压缩存储和非压缩存储）<br>5. 嵌套结构体的sizeof<br>6. 类对象的sizeof<br>7. 通过代码如何修改默认对齐模数&nbsp;&nbsp;<a href='http://www.cppblog.com/liyuxia713/archive/2009/04/25/80918.html'>阅读全文</a><img src ="http://www.cppblog.com/liyuxia713/aggbug/80918.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-04-25 11:33 <a href="http://www.cppblog.com/liyuxia713/archive/2009/04/25/80918.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]多重继承与虚继承</title><link>http://www.cppblog.com/liyuxia713/archive/2009/03/25/79747.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Wed, 25 Mar 2009 08:20:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/03/25/79747.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/79747.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/03/25/79747.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/79747.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/79747.html</trackback:ping><description><![CDATA[<div style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">Technorati 标签: <a href="http://technorati.com/tags/%e5%a4%9a%e9%87%8d%e7%bb%a7%e6%89%bf%ef%bc%8c%e8%99%9a%e7%bb%a7%e6%89%bf" rel=tag>多重继承，虚继承</a></div>
<p><strong>1.多重继承下的类作用域名字查找规则：</strong>第一步，编译器找到一个匹配的声明。如果匹配的声明不止一个，则导致二义性，出错；第二步，编译器确定找到的名字是否合法。
<p>避免二义性的方法：在解决二义性的派生类中定义函数的一个版本。
<p><strong>2. 采用虚继承的方法可以有效减少二义性。</strong>定义虚继承的方法，在派生列表中包含&#8220;virtual&#8221;。
<p>虚继承中名字查找方法。设查找函数func：（1）如果在每个路径中func表示同一基类成员，则没有二义性，因为类共享该成员的单个实例。（2）如果在某个路径中func是虚基类的成员，而在另一路径上是后代派生类的成员，也没有二义性，因为特定派生类实例的优先级高于共享虚基类实例。（3）如果沿每个继承路径func表示后代派生类的不同成员，则具有二义性。
<p><strong>3.虚继承的特殊初始化方式</strong>。通常，每个类只初始化自己的直接基类。但在虚继承中也这样运行的话，可能会多次初始化虚基类。
<p>由最低层（非虚继承）派生类的构造函数初始化虚基类。（2）任何直接或间接继承虚基类的类一般也必须为该虚基类提供自己的初始化式，以提供自身对象初始化使用。
<p><font color=#ff00ff>class ZooAnimal{...};</font>
<p><font color=#ff00ff>class Bear: public virtual ZooAnimal{...};</font>
<p><font color=#ff00ff>class Raccoon: public virtual ZooAnimal{...};</font>
<p><font color=#ff00ff>class Endangered{...};</font>
<p><font color=#ff00ff>class Panda: public Bear,public Raccoon,public Endangered{...};</font>
<p>在上面的例子中，Panda构造函数初始化Panda，ZooAnimal,Bear,Raccoon,Endangered部分，供Panda对象使用。Bear（or Raccoon）构造函数初始化Bear(or Raccoon),ZooAnimal部分供Bear(or Raccoon)对象使用.
<p><strong>4. 虚继承的构造函数次序</strong>。先是全部直接基类的虚基类的构造函数按声明的顺序，然后是非虚基类函数按声明的顺序运行。<img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=982263437555584821&amp;page=RSS%ef%bc%9a%e5%a4%9a%e9%87%8d%e7%bb%a7%e6%89%bf%e4%b8%8e%e8%99%9a%e7%bb%a7%e6%89%bf&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=81873&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=liyuxia-life.spaces.live.com&amp;GT1=liyuxia-life" width=0px><br>文章来源:<a href="http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!267.entry">http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!267.entry</a> </p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/79747.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-03-25 16:20 <a href="http://www.cppblog.com/liyuxia713/archive/2009/03/25/79747.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]模板中的一些规则</title><link>http://www.cppblog.com/liyuxia713/archive/2009/03/25/79748.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Wed, 25 Mar 2009 06:56:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/03/25/79748.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/79748.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/03/25/79748.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/79748.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/79748.html</trackback:ping><description><![CDATA[<p><strong>1. 模板定义内的自定义类型成员调用方法（用typename显示说明）：</strong>类可以定义类型成员，如size_type, size_t等类型。在定义模板类时如何调用它呢？为了说明是类型，显示用typename说明。
<p><font color=#ff00ff>template&lt;class cl, class T&gt;</font>
<p><font color=#ff00ff>cl func(cl* cl_p, T value)</font>
<p><font color=#ff00ff>{</font>
<p><font color=#ff00ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<font color=#ff0000>cl::size_type * value;</font> </font><font color=#000000>// If cl::size_type is a type, then a declaration</font>
<blockquote>
<p><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // If cl::size_type is an object, then a multiplication</font>
<p><font color=#ff00ff>typename cl::size_type *value;</font></p>
</blockquote>
<p><font color=#ff00ff>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font>
<p><strong>2. 非类型模板形参的使用: </strong>模板非类型形参是模板定义内部的常量值.(在需要常量表达式的时候,可以用非类型形参,如定义数组的长度)。
<p>因为非类型模板形参需要传递的是常量表达式，所以不支持一般的隐式类型转换。
<p><font color=#ff00ff>template&lt;class T, size_t N&gt; void fcn(T (&amp;cl)[N]) {...}</font>
<p><font color=#ff00ff>int x[20];</font>
<p><font color=#ff00ff>fcn(x);</font>
<p>
<p><font color=#ff00ff></font><strong>3. 模板何时实例化？</strong>函数声明，定义对象的引用和指向对象的指针都不会实例化。定义类对象或调用函数时实例化。
<p><strong>4.friend模板声明依赖性：</strong>（1） 当授予对给定模板所有实例的访问权时，在作用域中不需要存在该类模板或函数模板的声明。编译器将友元声明也当作类或函数的声明对待；（2）想要限制对特定实例化的友元关系时，必须在可以用于友元声明之前声明类或函数。
<p><strong>5.对于不同参数的函数模板用相同参数可以调用么？</strong>可以，会调用隐式转换。
<p><font color=#ff00ff>#include&lt;iostream&gt; </font>
<p><font color=#ff00ff>using namespace std; </font>
<p><font color=#ff00ff>template&lt;typename T1, typename T2&gt; </font>
<p><font color=#ff00ff>void print(const T1 &amp;v1, const T2 &amp;v2)</font><font color=#000000>&nbsp; //参数类型不同</font><font color=#ff00ff><br>{<br>&nbsp;&nbsp;&nbsp; cout &lt;&lt; "T1 = " &lt;&lt; v1 &lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cout &lt;&lt; "T2 = " &lt;&lt; v2 &lt;&lt;endl;<br>} </font>
<p><font color=#ff00ff>int main()<br>{<br>&nbsp;&nbsp;&nbsp; print(1,2); </font><font color=#000000>//ok </font>
<p><font color=#ff00ff>&nbsp;&nbsp;&nbsp; int a=1;<br>&nbsp;&nbsp;&nbsp; int b=2;<br>&nbsp;&nbsp;&nbsp; print(a,b);</font><font color=#000000> //ok，形参类型相同</font>
<p><font color=#ff00ff>&nbsp;&nbsp;&nbsp; return 0;<br>}</font><img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=982263437555584821&amp;page=RSS%ef%bc%9a%e6%a8%a1%e6%9d%bf%e4%b8%ad%e7%9a%84%e4%b8%80%e4%ba%9b%e8%a7%84%e5%88%99&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=81873&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=liyuxia-life.spaces.live.com&amp;GT1=liyuxia-life" width=0px><br>文章来源:<a href="http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!266.entry">http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!266.entry</a> </p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/79748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-03-25 14:56 <a href="http://www.cppblog.com/liyuxia713/archive/2009/03/25/79748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]模板编译模型</title><link>http://www.cppblog.com/liyuxia713/archive/2009/03/24/79749.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Tue, 24 Mar 2009 07:50:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/03/24/79749.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/79749.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/03/24/79749.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/79749.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/79749.html</trackback:ping><description><![CDATA[<p>1.包含编译模型（inclusion compilation model）. 函数声明放在头文件中，定义放在源文件中。头文件尾包含源文件。据说会出现一个模板实例化多次从而导致编译时性能显著降低。
<p><font color=#ff00ff><font color=#0000ff><font color=#cd8b32>//template.cpp</font><br></font>template&lt;typename T&gt;<br>void print(const T &amp;v)<br>{<br>&nbsp;&nbsp;&nbsp; cout &lt;&lt; "T = " &lt;&lt; v &lt;&lt;endl;<br>}</font>
<p><font color=#ff00ff><font color=#cd8b32>//template.h</font><br>#ifndef TEMPLATE_H<br>#define TEMPLATE_H </font>
<p><font color=#ff00ff>template&lt;typename T&gt;<br>void print(const T &amp;v); </font>
<p><font color=#ff00ff><strong>#include "template.cpp"</strong>&nbsp; </font>
<p><font color=#ff00ff>#endif</font>
<p><font color=#ff00ff><font color=#cd8b32>//main.cpp</font><br>#include&lt;iostream&gt;<br>#include "template.h"&nbsp;&nbsp; </font><font color=#000000>//#include"template.cpp" 用这条命令代替也可以。</font>
<p><font color=#ff00ff>using namespace std; </font>
<p><font color=#ff00ff>int main()<br>{<br>&nbsp;&nbsp;&nbsp; </font><font color=#ff00ff>print(1); <font color=#000000>//ok<br></font>&nbsp;&nbsp;&nbsp; return 0;<br>}</font>
<p>2. 分别编译模型（seperate compilation model）.函数声明和类定义放在头文件中，带export关键字的函数定义和类声明放在源文件中。源文件尾包含头文件。（<font color=#ff0000>不知道理解的对不对，用的编译器不支持分别编译，暂时无从判断了</font>）
<p><font color=#cd8b32>//the template definition goes in a separately-compiled source file</font>
<p><font color=#ff00ff>export template&lt;typename T&gt;</font>
<p><font color=#ff00ff>T print(const T&amp;v) /*...*/</font>
<p><font color=#cd8b32>//class template header goes in shared header file</font>
<p><font color=#ff00ff>template &lt;class T&gt; class cl{...};</font>
<p><font color=#cd8b32>//cl.cpp implementation file declares cl as exported</font>
<p><font color=#ff00ff>export template &lt;class T&gt; class cl;</font>
<p><font color=#ff00ff>#include "cl.h"</font>
<p><font color=#cd8b32>//cl member definitions</font>
<p><font color=#ff00ff></font><img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=982263437555584821&amp;page=RSS%ef%bc%9a%e6%a8%a1%e6%9d%bf%e7%bc%96%e8%af%91%e6%a8%a1%e5%9e%8b&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=81873&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=liyuxia-life.spaces.live.com&amp;GT1=liyuxia-life" width=0px><br>文章来源:<a href="http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!265.entry">http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!265.entry</a> </p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/79749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-03-24 15:50 <a href="http://www.cppblog.com/liyuxia713/archive/2009/03/24/79749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]基类的复制控制函数</title><link>http://www.cppblog.com/liyuxia713/archive/2009/03/23/79750.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Mon, 23 Mar 2009 11:09:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/03/23/79750.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/79750.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/03/23/79750.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/79750.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/79750.html</trackback:ping><description><![CDATA[<p>构造函数不能定义为virtual，派生类对象的基类数据成员部分在初始化列表中用基类构造函数初始化；
<p>基类析构函数应定义为virtual，复制操作符一般定义为非virtual
<p>在基类构造函数和析构函数中，将派生类对象当作基类类型对象对待。（因为在这两个函数的运行过程中，对象不是一个完整的派生类类型）
<p>类的复制控制的三法则有个例外：定义（空）虚构够函数时可以不定义构造函数和赋值函数。<img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=982263437555584821&amp;page=RSS%ef%bc%9a%e5%9f%ba%e7%b1%bb%e7%9a%84%e5%a4%8d%e5%88%b6%e6%8e%a7%e5%88%b6%e5%87%bd%e6%95%b0&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=81873&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=liyuxia-life.spaces.live.com&amp;GT1=liyuxia-life" width=0px><br>文章来源:<a href="http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!264.entry">http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!264.entry</a> </p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/79750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-03-23 19:09 <a href="http://www.cppblog.com/liyuxia713/archive/2009/03/23/79750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]派生类到基类转换的可访问性</title><link>http://www.cppblog.com/liyuxia713/archive/2009/03/22/79751.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Sun, 22 Mar 2009 12:22:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/03/22/79751.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/79751.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/03/22/79751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/79751.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/79751.html</trackback:ping><description><![CDATA[<p>派生类本身的成员和友元任何继承时都可以使用派生类到基类转换。
<p>对于后代类和用户代码：
<p>public继承时：后代类和用户代码都可以。
<p>protected继承时：后代类可以，用户代码不可以。
<p>private继承时：后代类和用户代码都不可以。<img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=982263437555584821&amp;page=RSS%ef%bc%9a%e6%b4%be%e7%94%9f%e7%b1%bb%e5%88%b0%e5%9f%ba%e7%b1%bb%e8%bd%ac%e6%8d%a2%e7%9a%84%e5%8f%af%e8%ae%bf%e9%97%ae%e6%80%a7&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=81873&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=liyuxia-life.spaces.live.com&amp;GT1=liyuxia-life" width=0px><br>文章来源:<a href="http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!263.entry">http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!263.entry</a> </p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/79751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-03-22 20:22 <a href="http://www.cppblog.com/liyuxia713/archive/2009/03/22/79751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]派生类对基类成员的访问权限</title><link>http://www.cppblog.com/liyuxia713/archive/2009/03/22/79752.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Sun, 22 Mar 2009 11:26:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/03/22/79752.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/79752.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/03/22/79752.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/79752.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/79752.html</trackback:ping><description><![CDATA[<p>1.派生类对基类private成员没有访问权限。
<p>2.派生类只能通过派生类对象访问其<font color=#ff0000>基类的protected成员</font>，派生类对其<font color=#ff0000>基类类型对象的protected成员</font>没有特殊访问权限。
<p><font color=#ff00ff>#include&lt;iostream&gt;<br>using namespace std; </font>
<p><font color=#ff00ff>class Base<br>{<br>public:<br>&nbsp;&nbsp;&nbsp; Base():i(0),j(0){};<br>protected:<br>&nbsp;&nbsp;&nbsp; int i;<br>private:<br>&nbsp;&nbsp;&nbsp; int j;<br>}; </font>
<p><font color=#ff00ff>class Derived:public Base<br>{<br>&nbsp;&nbsp;&nbsp; Derived():Base(){}; </font>
<p><font color=#ff00ff>&nbsp;&nbsp;&nbsp; print(const Base &amp;b, const Derived &amp;d)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int num = i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#ff0000>//num = b.i;</font> <font color=#404040><font color=#000000>//error. cannot access protected member declared in class 'Base'</font><br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; num = d.i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#ff0000>//num = d.j;</font> <font color=#000000>//error. cannot access private member declared in class 'Base'<br></font>&nbsp;&nbsp;&nbsp; };<br>}; </font>
<p><font color=#ff00ff>int main()<br>{<br>&nbsp;&nbsp;&nbsp; return 0;<br>}</font><img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=982263437555584821&amp;page=RSS%ef%bc%9a%e6%b4%be%e7%94%9f%e7%b1%bb%e5%af%b9%e5%9f%ba%e7%b1%bb%e6%88%90%e5%91%98%e7%9a%84%e8%ae%bf%e9%97%ae%e6%9d%83%e9%99%90&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=81873&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=liyuxia-life.spaces.live.com&amp;GT1=liyuxia-life" width=0px><br>文章来源:<a href="http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!262.entry">http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!262.entry</a> </p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/79752.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-03-22 19:26 <a href="http://www.cppblog.com/liyuxia713/archive/2009/03/22/79752.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]析构函数（内存泄漏，三法则）</title><link>http://www.cppblog.com/liyuxia713/archive/2009/03/08/79754.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Sun, 08 Mar 2009 13:25:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/03/08/79754.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/79754.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/03/08/79754.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/79754.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/79754.html</trackback:ping><description><![CDATA[<div style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">Technorati 标签: <a href="http://technorati.com/tags/%e6%9e%90%e6%9e%84%e5%87%bd%e6%95%b0%ef%bc%8c%e5%86%85%e5%ad%98%e6%b3%84%e6%bc%8f%ef%bc%8c%e4%b8%89%e6%b3%95%e5%88%99" rel=tag>析构函数，内存泄漏，三法则</a></div>
<p>任何时候编译器都会合成析构函数，并且合成的析构函数总会运行。
<p>撤销容器（标准库容器和内置数组）是按逆序进行的。
<p><font color=#ff0000>内存泄漏（Memory leak）：</font><font color=#6600ff>删除指向动态分配内存的指针失败，因而无法将该块内存返还给自由存储区，这样的删除动态分配内存失败称为内存泄漏。</font>
<p>只有当删除指向类对象的指针时才会运行该对象的析构函数。如果不删除指针，则对象一直存在，导致内存泄漏。
<p><font color=#ff0000>三法则（rule of three）：</font>如果类需要析构函数，则也需要赋值操作符和复制构造函数。<img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=982263437555584821&amp;page=RSS%ef%bc%9a%e6%9e%90%e6%9e%84%e5%87%bd%e6%95%b0%ef%bc%88%e5%86%85%e5%ad%98%e6%b3%84%e6%bc%8f%ef%bc%8c%e4%b8%89%e6%b3%95%e5%88%99%ef%bc%89&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=81873&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=liyuxia-life.spaces.live.com&amp;GT1=liyuxia-life" width=0px><br>文章来源:<a href="http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!255.entry">http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!255.entry</a> </p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/79754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-03-08 21:25 <a href="http://www.cppblog.com/liyuxia713/archive/2009/03/08/79754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]（复制、默认）构造函数</title><link>http://www.cppblog.com/liyuxia713/archive/2009/03/08/79755.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Sun, 08 Mar 2009 13:00:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/03/08/79755.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/79755.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/03/08/79755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/79755.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/79755.html</trackback:ping><description><![CDATA[<div style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">Technorati 标签: <a href="http://technorati.com/tags/%e7%b1%bb%e5%88%9d%e5%a7%8b%e5%8c%96%e5%88%97%e8%a1%a8%ef%bc%8c%e9%bb%98%e8%ae%a4%e6%9e%84%e9%80%a0%e5%87%bd%e6%95%b0%ef%bc%8c%e5%a4%8d%e5%88%b6%e6%9e%84%e9%80%a0%e5%87%bd%e6%95%b0" rel=tag>类初始化列表，默认构造函数，复制构造函数</a></div>
<p><font color=#ff0000>初始化列表：</font>通常使用初始化是为了提高效率，它直接调用与实参匹配的构造函数。【因为一般在构造函数体内的复制也经过初始化--&gt;计算赋值<font color=#404040>（此时会调用复制构造函数）</font>两个阶段】；特别的有些时候只能用初始化列表，即不能赋值的参数，如：const或引用类型的成员，没有默认构造函数的类类型成员。初始化列表中变量的初始化顺序是先声明的先初始化.
<p><font color=#ff00ff>class cl1{ private: const int ci;&nbsp; int &amp;ri;};</font><font color=#404040> //ci,ri只能在初始化列表中进行初始化。</font>
<p><font color=#404040><font color=#ff0000>默认构造函数：</font></font><font color=#6600ff>全部形参是默认实参的构造函数也是默认构造函数。</font>
<p>只要自己定义了（任意的）构造函数，编译器就不会为我们合成默认构造函数。
<p><font color=#ff0000>复制构造函数：</font><font color=#6600ff>单个形参为本类类型对象的引用的构造函数。对于不支持复制的类型（如IO类型）不能用复制构造函数。如果自己定义了复制构造函数（而不是构造函数，即：只定义构造函数，但没有定义复制构造函数，则编译器合成复制构造函数），则编译器不会合成复制构造函数。【复制构造函数需要特别注意指针成员，以后将说明】</font>
<p><font color=#ff00ff>ifstream file1("filename1");</font> <font color=#404040>//ok, direct initialization.</font>
<p><font color=#ff00ff>ifstream file2="filename2";</font> <font color=#404040>//error</font>
<p><font color=#ff0000>如何防止复制：</font>可以通过将复制构造函数声明为private来禁止普通函数（非成员，非友元函数）的访问；可以通过声明一个private复制构造函数而不对其定义来禁止成员函数和友元函数的访问。<img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=982263437555584821&amp;page=RSS%ef%bc%9a%ef%bc%88%e5%a4%8d%e5%88%b6%e3%80%81%e9%bb%98%e8%ae%a4%ef%bc%89%e6%9e%84%e9%80%a0%e5%87%bd%e6%95%b0&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=81873&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=liyuxia-life.spaces.live.com&amp;GT1=liyuxia-life" width=0px><br>文章来源:<a href="http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!254.entry">http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!254.entry</a> </p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/79755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-03-08 21:00 <a href="http://www.cppblog.com/liyuxia713/archive/2009/03/08/79755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]类的一些特殊限制成员</title><link>http://www.cppblog.com/liyuxia713/archive/2009/03/06/79756.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Fri, 06 Mar 2009 13:57:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/03/06/79756.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/79756.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/03/06/79756.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/79756.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/79756.html</trackback:ping><description><![CDATA[<p><font color=#ff0000>inline成员函数：</font> 声明或定义时指定为inline都可以。作用：在调用处直接在行内展开代码，以提高效率。类的inline成员函数定义在包含该类的头文件中。 类内部定义的函数均为inline函数。
<p><font color=#ff0000>mutable数据成员</font>：任何函数（包括类const成员函数）都可以修改mutable数据成员。
<p><font color=#ff0000>explicit构造函数：</font>声明时指定，定义时不允许重复指定为explicit。作用：防止在需要隐式转换的上下文中使用构造函数。
<p><font color=#ff0000>friend成员：</font>非类成员可以访问类的私有成员。需要特别注意友元声明和作用域。如果想将（其他类的）成员函数设为友元，必须先声明；而如果想将（其他）类或非成员函数设为友元，则不必预先声明。
<p><font color=#ff0000>static数据成员：</font>static数据成员不用构造函数，在类的外部定义，定义时进行初始化。
<p><font color=#ff0000>static成员函数：</font>声明时指定static类型，定义时不用重复声明。没有this指针。
<p><font color=#ff0000>const static数据成员：</font>一般地类的static数据成员不能在类的内部定义。有例外就是可以用常量表达式初始化const static数据成员，不过即使这样也需要在类定义体的外部进行该const static数据成员的定义。
<p><font color=#404040>static成员不是类对象的组成部分，非static数据成员不能是该成员所属的类类型，而只能是对应的指针和引用，而static成员则可以是该成员所属的类类型。</font><img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=982263437555584821&amp;page=RSS%ef%bc%9a%e7%b1%bb%e7%9a%84%e4%b8%80%e4%ba%9b%e7%89%b9%e6%ae%8a%e9%99%90%e5%88%b6%e6%88%90%e5%91%98&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=81873&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=liyuxia-life.spaces.live.com&amp;GT1=liyuxia-life" width=0px><br>文章来源:<a href="http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!252.entry">http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!252.entry</a> </p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/79756.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-03-06 21:57 <a href="http://www.cppblog.com/liyuxia713/archive/2009/03/06/79756.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]容器适配器</title><link>http://www.cppblog.com/liyuxia713/archive/2009/03/06/79757.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Fri, 06 Mar 2009 11:17:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/03/06/79757.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/79757.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/03/06/79757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/79757.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/79757.html</trackback:ping><description><![CDATA[<blockquote>
<p>queue&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; priority_queue&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stack
<p>队列&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 堆&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 栈
<p>deque&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vector&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deque <font color=#404040>//默认相关联容器类型</font>
<p>push_front&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 随机访问&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无&nbsp; <font color=#404040>//对关联容器的要求</font></p>
</blockquote><img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=982263437555584821&amp;page=RSS%ef%bc%9a%e5%ae%b9%e5%99%a8%e9%80%82%e9%85%8d%e5%99%a8&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=81873&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=liyuxia-life.spaces.live.com&amp;GT1=liyuxia-life" width=0px><br>文章来源:<a href="http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!251.entry">http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!251.entry</a> 
<img src ="http://www.cppblog.com/liyuxia713/aggbug/79757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-03-06 19:17 <a href="http://www.cppblog.com/liyuxia713/archive/2009/03/06/79757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]迭代器</title><link>http://www.cppblog.com/liyuxia713/archive/2009/03/06/79758.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Fri, 06 Mar 2009 11:11:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/03/06/79758.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/79758.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/03/06/79758.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/79758.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/79758.html</trackback:ping><description><![CDATA[<p>感觉迭代器这部分函数的返回类型是没太弄明白的，以后用的时候得多注意点。
<p><font color=#ff0000>1.插入：</font>一般插入是在给定的迭代器位置前，这样是end迭代器也课正常编译。插入的元素类型必须与c的类型完全一样。
<p>&nbsp;&nbsp; <font color=#ff00ff>void c.push_back(t); </font>
<p><font color=#ff00ff>&nbsp;&nbsp;&nbsp; void c.insert(p,b,e); </font>
<p><font color=#ff00ff>&nbsp;&nbsp;&nbsp; void c.insert(p,n,t);</font>
<p><font color=#ff00ff>&nbsp;&nbsp;&nbsp; iter c.insert(p,t);</font>
<p><font color=#ff0000>2.赋值</font>：<font color=#ff00ff>c1= c2</font>
<p><font color=#ff00ff>&nbsp;&nbsp;&nbsp;&nbsp; c.assign(b,e); c.assign(n,t)</font>&nbsp; <font color=#404040>//允许不同的容器，不同的元素，只要元素类型兼容。</font>
<p><font color=#ff0000>3.访问：</font><font color=#ff00ff>c.back(); c.front(); </font>
<blockquote>
<p><font color=#ff00ff>c[n]; c.at[n];</font><font color=#404040> //这样的下标访问容易越界。后者越界是抛出 out_of_range异常。</font></p>
</blockquote>
<p><font color=#ff0000>4.删除</font>：<font color=#ff00ff>iter c.erase(p);</font>
<blockquote>
<p><font color=#ff00ff>iter c.erase(b,e);</font>
<p><font color=#ff00ff>void c.clear();</font>
<p><font color=#ff00ff>void c.pop_back();</font>
<p><font color=#ff00ff>c.pop_front();</font></p>
</blockquote><img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=982263437555584821&amp;page=RSS%ef%bc%9a%e8%bf%ad%e4%bb%a3%e5%99%a8&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=81873&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=liyuxia-life.spaces.live.com&amp;GT1=liyuxia-life" width=0px><br>文章来源:<a href="http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!250.entry">http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!250.entry</a> 
<img src ="http://www.cppblog.com/liyuxia713/aggbug/79758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-03-06 19:11 <a href="http://www.cppblog.com/liyuxia713/archive/2009/03/06/79758.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]const限制符</title><link>http://www.cppblog.com/liyuxia713/archive/2009/02/28/79759.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Sat, 28 Feb 2009 13:38:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/02/28/79759.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/79759.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/02/28/79759.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/79759.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/79759.html</trackback:ping><description><![CDATA[<p>1. <font color=#ff0000>const变量：</font><font color=#ff00ff>const type v;</font> 必须定义时初始化，不能修改其值。<font color=#404040>备注：关于const变量的作用域要特别注意，它是局部的，而默认的C++变量是全局的。通过加extern限制可以令const对象可以在全局被访问。如代码：(顺便提一下static)</font>
<p><font color=#404040>file1.cpp&nbsp;&nbsp; </font><font color=#ff00ff>type v1; </font>
<blockquote>
<p><font color=#ff00ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const type v2;&nbsp; </font><font color=#404040>//now,v2 is a local variable.</font>
<p><font color=#ff00ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extern const type v3</font><font color=#404040>;//now,v3 is a global variable. must add 'extern'~. </font></p>
</blockquote>
<p><font color=#404040>file2.cpp&nbsp;&nbsp; <font color=#ff00ff>type v1;</font> //&nbsp; error.redeclaration.</font>
<blockquote>
<p><font color=#404040>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#ff00ff>extern type v1;</font> //ok.</font>
<p><font color=#404040>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#ff00ff>type v2;</font> //ok.but not equivalent to v2 in file1.cpp</font>
<p><font color=#404040>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#ff00ff>const type v3;</font>&nbsp; // ok.but not equivalent to v3 in file1.cpp</font>
<p><font color=#404040>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#ff00ff>extern const type v3;</font> //ok.equal to v3 in file1.cpp.&nbsp; </font></p>
</blockquote>
<p>2. <font color=#ff0000>const引用：</font><font color=#ff00ff>const type&amp; v;</font> 是指向const对象的引用。非const引用只能绑定到与该引用同类型的对象。而const引用则可以绑定到不同但相关的类型那个的对象和右值。
<p>double dv = 1.0;&nbsp; const int &amp;iv = dv; 编译时等价于
<p>int temp = dv;&nbsp; const int &amp;iv = temp; //可以看出对iv的修改并不会影响dv的值
<p>3.<font color=#ff0000>const与指针</font>：（1） <font color=#ff0000>指向const对象的指针:</font> <font color=#ff00ff>const type* v;</font> 有时记作<font color=#ff00ff>type const* v;</font>可以修改指针，但不能直接通过该指针修改指针指向的对象。（可以通过定义非const指针指向该对象，从而修改其值）（2）<font color=#ff0000>const指针:</font> type <font color=#ff00ff>*const v</font>;可以修改指针指向的对象，但不能修改指针本身。（3）<font color=#ff0000>指向const对象的const指针</font>：<font color=#ff00ff>const type *const v;</font> （<font color=#404040>备注：<font color=#ff00ff>typedef string * name;&nbsp; const name v;</font> //</font><font color=#404040>v的类型是指向string类型的const指针。）</font>&nbsp;
<p>4.<font color=#ff0000>const与一般函数：</font> (1)<font color=#ff00ff> const type1 func(type2 v);</font> 函数返回值为const; (2) <font color=#ff00ff>type1 func(const type2 v);</font>形参为const变量。因为形参不是引用，不修改实参的值，所以此时的const不起特别的作用；（3）<font color=#ff00ff>type1 func(const type&amp; v);</font> 形参为const引用，不修改传递到形参的实参值。 指针时相同，不修改指针指向的对象的值。
<p>5.<font color=#ff0000>const与类成员函数（常量成员函数）</font>：type func(type v) const;等价于type func(const *this,type v) const; 它是值this指针是指向const对象的指针，这个函数不改变调用该函数的对象<font color=#404040>。（备注：事实上是不可以显示使用this指针作为形参的，但可以在函数体中显示地使用this指针。）</font>
<p>6.<font color=#ff0000>const与迭代器：</font><font color=#ff00ff>vector&lt;type&gt;::const_iterator it;&nbsp; const vector&lt;type&gt;::iterator iter;</font> it指向的元素不能修改，iter指向的元素可以修改，但迭代器本身不能修改。
<p>7.<font color=#ff0000>const与容器：</font> <font color=#ff00ff>const vector&lt;type&gt; vec;</font> 需要注意此时定义的容器迭代器必须是const_iterator型。<img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=982263437555584821&amp;page=RSS%ef%bc%9aconst%e9%99%90%e5%88%b6%e7%ac%a6&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=81873&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=liyuxia-life.spaces.live.com&amp;GT1=liyuxia-life" width=0px><br>文章来源:<a href="http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!243.entry">http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!243.entry</a> </p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/79759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-02-28 21:38 <a href="http://www.cppblog.com/liyuxia713/archive/2009/02/28/79759.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]函数参数</title><link>http://www.cppblog.com/liyuxia713/archive/2009/02/28/79760.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Sat, 28 Feb 2009 11:18:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/02/28/79760.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/79760.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/02/28/79760.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/79760.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/79760.html</trackback:ping><description><![CDATA[<p><font face=宋体>1.<font color=#ff0000>非引用形参</font>通过复制实参值创建和定义函数的局部对象，从而对形参的操作不改变实参值。因为是复制初始化在形参前加const无影响。<font color=#ff00ff>type function(type2 v)</font> 和<font color=#ff00ff>type function(const type2 v)</font>是等价的。这一点在函数重载时也要注意，如果同时出现上述的两个函数则是重复定义而不是重载。</font>
<p><font face=宋体>2.<font color=#ff0000>引用形参</font>是实参的别名，从而对形参的操作改变实参值。用途：第一，大型的参数通过复制初始化效率低时用引用参数；第二，对于一些不能复制初始化的参数；第三，可以通过增加形参返回额外的信息。 <font color=#ff00ff><font color=#000080>注意：</font>type function(type2 v)</font> 和 <font color=#ff00ff>type function(const type2 v)</font>是不同的。</font>
<p><font face=宋体>3.<font color=#ff0000>const&amp;</font> :一般不需要修改实参时用const引用。这主要是考虑到非const引用形参的如下缺点：第一，传递的实参必须与形参类型完全相同，而不包含可以隐式转换的类型；第二，传递的实参不能是const，右值。</font>
<p><font face=宋体>4.<font color=#ff0000>指向指针的引用</font> <font color=#ff00ff>type* &amp;v</font>；</font>
<p><font face=宋体>5.（1)<font color=#ff0000>非引用数组形参</font>：<font color=#ff00ff>int*, int[],int[n]。</font>这三个是等价的，都传递指向第一个元素的指针。这样容易产生越界。如何防止越界呢？第一，通过结束标记检测数组的结束，如C风格字符串；第二，用标准库规范，传递第一个和最后一个的下一个元素的指针做参数；第三，显示传递数组大小的形参。</font>
<p><font face=宋体>5.（2）<font color=#ff0000>引用数组形参</font><font color=#6600ff>：<font color=#ff00ff>type (&amp;arr)[n]；</font> 注意两点：一是，圆括号是必须的，因为下标运算符的优先级更高；二是，表示数组元素个数的n是必须的，因为引用是数组别名，而数组是固定长度的。</font></font>
<p><font face=宋体>6.<font color=#ff0000>默认实参</font>：第一要考虑位置，第二，如果提供实参，则它覆盖默认的实参值。</font><img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=982263437555584821&amp;page=RSS%ef%bc%9a%e5%87%bd%e6%95%b0%e5%8f%82%e6%95%b0&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=81873&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=liyuxia-life.spaces.live.com&amp;GT1=liyuxia-life" width=0px><br>文章来源:<a href="http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!242.entry">http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!242.entry</a> </p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/79760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-02-28 19:18 <a href="http://www.cppblog.com/liyuxia713/archive/2009/02/28/79760.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]C风格字符串与string类型</title><link>http://www.cppblog.com/liyuxia713/archive/2009/02/27/79761.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Fri, 27 Feb 2009 13:18:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/02/27/79761.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/79761.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/02/27/79761.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/79761.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/79761.html</trackback:ping><description><![CDATA[<p>C风格字符串等价于string 类型字符串字面值
<p>string str1("Hello!"); //ok.
<p>char *str2 = str1; //error.
<p>char *str3 = str2.c_str(); //ok. but not quite.
<p><font color=#ff0000>//注意c_str()返回的数据类型是const char</font>
<p>const char *str4 = str2.c_str(); //ok.<img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=982263437555584821&amp;page=RSS%ef%bc%9aC%e9%a3%8e%e6%a0%bc%e5%ad%97%e7%ac%a6%e4%b8%b2%e4%b8%8estring%e7%b1%bb%e5%9e%8b&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=81873&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=liyuxia-life.spaces.live.com&amp;GT1=liyuxia-life" width=0px><br>文章来源:<a href="http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!232.entry">http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!232.entry</a> </p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/79761.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-02-27 21:18 <a href="http://www.cppblog.com/liyuxia713/archive/2009/02/27/79761.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]动态内存管理</title><link>http://www.cppblog.com/liyuxia713/archive/2009/02/27/79762.html</link><dc:creator>幸运草</dc:creator><author>幸运草</author><pubDate>Fri, 27 Feb 2009 13:09:00 GMT</pubDate><guid>http://www.cppblog.com/liyuxia713/archive/2009/02/27/79762.html</guid><wfw:comment>http://www.cppblog.com/liyuxia713/comments/79762.html</wfw:comment><comments>http://www.cppblog.com/liyuxia713/archive/2009/02/27/79762.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liyuxia713/comments/commentRss/79762.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liyuxia713/services/trackbacks/79762.html</trackback:ping><description><![CDATA[<p><u><font color=#800080>动态分配的数组：</font></u>成员为类类型时用默认构造函数，为内置类型时不自动初始化。（同函数内部变量的自动初始化）
<p>可以采用 <font color=#ff00ff>new type[]()</font> 由内置类型的默认值初始化，注意不能在圆括号内写入值初始化。
<p>但是当是单个对象定义时可以： <font color=#ff00ff>new type(value)</font> 是有效的<img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=982263437555584821&amp;page=RSS%ef%bc%9a%e5%8a%a8%e6%80%81%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=81873&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=liyuxia-life.spaces.live.com&amp;GT1=liyuxia-life" width=0px><br>文章来源:<a href="http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!231.entry">http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!231.entry</a> </p>
<img src ="http://www.cppblog.com/liyuxia713/aggbug/79762.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liyuxia713/" target="_blank">幸运草</a> 2009-02-27 21:09 <a href="http://www.cppblog.com/liyuxia713/archive/2009/02/27/79762.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>