﻿<?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++博客-烟皑-随笔分类-《Visual C++代码参考与技巧大全》学习笔记</title><link>http://www.cppblog.com/kangnixi/category/12808.html</link><description>人要时刻保持谦虚和谨慎的态度。
                            ——烟皑留 2010年1月29日 14：07</description><language>zh-cn</language><lastBuildDate>Wed, 17 Feb 2010 23:26:08 GMT</lastBuildDate><pubDate>Wed, 17 Feb 2010 23:26:08 GMT</pubDate><ttl>60</ttl><item><title>ASCII码查询器</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/17/107990.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Wed, 17 Feb 2010 15:38:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/17/107990.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107990.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/17/107990.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107990.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107990.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在很多情况下，程序员迫切需要取得一个按键的ASCII码值，一些常用的字符的ASCII可以去记住它，比如‘A’，‘1’等，但是一些生僻的字符的ASCII，比如‘:’、‘+’等，就要去查ASCII码表，扩展ASCII码共有256个字符，查询时浪费时间并且有时还会查询错误。下面写一个程序，程序在接受到某个按键消息时，将接受到按键的转换为ASCII码。&nbsp;&nbsp;<a href='http://www.cppblog.com/kangnixi/archive/2010/02/17/107990.html'>阅读全文</a><img src ="http://www.cppblog.com/kangnixi/aggbug/107990.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-17 23:38 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/17/107990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PreTranslateMessage</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/17/107989.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Wed, 17 Feb 2010 15:11:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/17/107989.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107989.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/17/107989.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107989.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107989.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 该随笔来源于CSDN博客，主要有PreTranslateMessage函数原型，相关说明以及笔者关于该函数的一些心得体会&nbsp;&nbsp;<a href='http://www.cppblog.com/kangnixi/archive/2010/02/17/107989.html'>阅读全文</a><img src ="http://www.cppblog.com/kangnixi/aggbug/107989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-17 23:11 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/17/107989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在VC6下建立MFC工程图解</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/17/107980.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Wed, 17 Feb 2010 12:16:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/17/107980.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107980.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/17/107980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107980.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107980.html</trackback:ping><description><![CDATA[<p align=center><br>建立简单的对话框的MFC工程图解</p>
第一步：<br>
<div align=center src_cetemp="/images/cppblog_com/kangnixi/QueryASCII1.png"><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/QueryASCII1.png"></div>
<br>第二步：注意What language would you like resources in?下面的选项选择Chinese，否则运行工程，中文会出现乱码的情况，详情可以看这个博文：<a href="http://www.blogjava.net/Unmi/archive/2007/06/21/125715.html">VC窗口程序中出现中文乱码的解决<br></a>
<div align=center src_cetemp="/images/cppblog_com/kangnixi/QueryASCII2.png"><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/QueryASCII7.png"></div>
<br>第三步：<br>
<div align=center src_cetemp="/images/cppblog_com/kangnixi/QueryASCII3.png"><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/QueryASCII3.png"></div>
<br>第四步：<br>
<div align=center src_cetemp="/images/cppblog_com/kangnixi/QueryASCII4.png"><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/QueryASCII4.png"></div>
<br>第五步：<br>
<div align=center src_cetemp="/images/cppblog_com/kangnixi/QueryASCII5.png"><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/QueryASCII5.png"></div>
<br>第六步：<br>
<div align=center src_cetemp="/images/cppblog_com/kangnixi/QueryASCII6.png"><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/QueryASCII6.png"></div>
<br>出现问题集合：<br>1、问：如果新建工程后，没有出现工具箱，也就是controls那个工具箱，该如何办？<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;答：可以在工具栏右边的空白位置出，点右键，弹出菜单里选&#8220;controls"或者&#8220;控件&#8221;。
<img src ="http://www.cppblog.com/kangnixi/aggbug/107980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-17 20:16 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/17/107980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC++的优化技术</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/17/107974.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Wed, 17 Feb 2010 10:08:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/17/107974.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107974.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/17/107974.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107974.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107974.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、问题阐述</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VC++</span><span>的优化技术，从两个方面进行考虑，即代码速度和代码大小，这两个方面并非一定要放在一起考虑，视具体的情况而定。比如，某一个模块需要只有</span><span>5KB</span><span>的内存空间，我们程序只能在</span><span>5KB</span><span>的环境下运行，在这种情况下，最小代码是我们追求的目标。从编译器的角度讲如何对代码进行优化处理呢？</span></p>
<p><span style="COLOR: red">2、实现技巧</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据所建立的目标不同，</span><span>VC++</span><span>预定义了一套自己的优化配置选项，例如当建立调试版本时，关闭所有的优化开关，保证可执行文件是源文件的直接翻译。对于发行版本，其默认优化是以最快速度为目的的。这是以增加代码量为代价的。这两种建立应用程序的方法能满足大多数应用程序的需求。但是，有时需要手工设置编译器优化选项。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选择【</span><span>Project</span><span>】—</span><span>&gt;</span><span>【</span><span>Settings</span><span>】菜单命令，弹出&#8220;</span><span>Project Settings</span><span>&#8221;对话框，</span></p>
<p>&nbsp;
<div align=center src_cetemp="/images/cppblog_com/kangnixi/youhua1.png"><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/youhua1.png"></div>
<p>&#160;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其中图的&#8220;</span><span>C/C++</span><span>&#8221;标签页，包含了所有控制编译器优化一个工程文件的所有开关，如下图所示</span></p>
<p>&nbsp;
<div align=center src_cetemp="/images/cppblog_com/kangnixi/youhua2.png"><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/youhua2.png"></div>
<p>&#160;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;优化选项列表依赖于对&#8220;</span><span>Category</span><span>&#8221;下拉列表框的选择，其中</span><span>3</span><span>个包含了与编译器相关的所有开发组件，它们分别是</span><span>General</span><span>、</span><span>Code Generation</span><span>、</span><span>Cunstomize</span><span>，如图所示</span></p>
<p>&nbsp;
<div align=center src_cetemp="/images/cppblog_com/kangnixi/youhua3.png"><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/youhua3.png"></div>
<p>&#160;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其中&#8220;</span><span>General</span><span>&#8221;包含的优化选项有</span><span>Defaut</span><span>、</span><span>Disable</span><span>、</span><span>Maximize Speed</span><span>、</span><span>Minimize Size</span><span>和</span><span>Customize</span><span>，在其中可以选择最快速度和最小代码。</span></p>
<p>&nbsp;
<div align=center src_cetemp="/images/cppblog_com/kangnixi/youhua4.png"><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/youhua4.png"></div>
<br><span style="COLOR: #000000">想要获得更多内容，可点击：</span><a href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html"><font color=#444444>《Visual C++代码参考与技巧大全》学习笔记——索引随笔</font></a><br>
<p>&#160;</p>
<img src ="http://www.cppblog.com/kangnixi/aggbug/107974.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-17 18:08 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/17/107974.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Link2001的常见错误</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/17/107973.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Wed, 17 Feb 2010 09:59:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/17/107973.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107973.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/17/107973.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107973.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107973.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、问题阐述</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Link(</span><span>连接</span><span>)</span><span>错误时常见的错误，其中又以</span><span>Link2001</span><span>最为常见，引起</span><span>Link2001</span><span>错误的原因是什么呢？</span></p>
<p><span style="COLOR: red">2、Link2001错误原因及实现技巧</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #008000">（1）由于编码错误导致的Link2001错误</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;①不相匹配的程序代码或模块定义（</span><span>.DEF</span><span>）文件导致</span><span>Link2001</span><span>。例如，如果在</span><span>C++</span><span>源文件内声明了一变量&#8220;</span><span>var1</span><span>&#8221;，视图却在另一个文件内以变量&#8220;</span><span>var1</span><span>&#8221;访问该变量。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;②如果使用的内联函数是在</span><span>.cpp</span><span>文件内定义的，而不是在头文件内定义将导致</span><span>Link2001</span><span>错误</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;③调用函数如果所用的参数类型头函数与声明时的类型不符将会产生</span><span>Link2001</span><span>错误</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;④视图从基类的构造函数或析构函数中调用虚拟函数时将会导致</span><span>Link2001</span><span>错误</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;⑤要注意函数和变量的可公用性，只有全局变量、函数是可共用的。静态函数和静态变量具有相同的使用范围。当试图从文件外部调用任何没有在该文件内声明的静态变量时将导致编译错误或</span><span>Link2001</span><span>错误。</span>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;（</span><span>2</span><span>）由于编译和联机的设置而造成的</span><span>Link2001</span><span>错误</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;①如果编译时使用的是</span><span>/NOD(/NODERAULTLIB)</span><span>选项，程序所需要的运行库和</span><span>MFC</span><span>将由编译器写入目标文件模块，但除非在文件中明确包含这些库名，否则这些库不会被链接进工程文件。这种情况下使用/NOD将导致Link2001错误。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;②如果没有为WinMainCRTStartup设定程序入口，在使用Unicode和MFC时将得到&#8220;unresolved external on <a style="COLOR: #000000" href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#87;&#105;&#110;&#77;&#97;&#105;&#110;&#64;&#49;&#54;" href_cetemp>WinMain@16&#8220;的Link2001</a>错误信息。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;③使用/MD选项编译时，既然所有的运行库都被保留在动态链接库之内，如果源文件中对&#8220;func&#8221;的引用，在目标文件里即对&#8220;__imp__func&#8221;的引用。如果试图使用静态库LIBC.lib或LIBCMT.lib进行链接，将在__imp__func上发生Link2001错误。如果不使用/MD选项编译，在使用MSVCxx.lib链接时也会发生Link2001错误。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;④在使用/ML编译时，如用LIBCMT.lib链接会在_errno上发生Link2001错误。<br></span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;⑤当编译调试版的应用程序时，如果采用发行版模态库进行链接也会产生Link2001错误；同样，使用调试版模态库链接发行版应用程序时也会产生相同的错误。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;⑥不同版本的库和编译器的混合使用也能产生问题，因为新库的库里可能包含早先的版本没有的符号和说明。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;⑦在不同的模块中使用内联和非内联的编译选项能够导致Link2001错误。如果创建C++库时打开了函数内联（/Ob2或/Ob2），但是在描述该函数的相应头文件却关闭了函数内联（没有inline关键字），将得到错误信息。为避免该问题的发生，应该在相应的头文件中用inline关键字标志位内联函数。</span></p>
<p>&nbsp;<br><span style="COLOR: #000000">想要获得更多内容，可点击：</span><a href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html"><font color=#444444>《Visual C++代码参考与技巧大全》学习笔记——索引随笔</font></a></p>
<img src ="http://www.cppblog.com/kangnixi/aggbug/107973.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-17 17:59 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/17/107973.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>运算符的重载</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/17/107972.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Wed, 17 Feb 2010 09:25:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/17/107972.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107972.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/17/107972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107972.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107972.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;1、&nbsp;运算符重载的概念&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;运算符重载是C++的重要组成部分，它可以让程序更加简单易懂，简单的运算符可以使复杂函数的理解更直观。对于普通对象来说可以使用算术运算符让它们参与计算，C++也允许为类的对象构造运算符来实现单目或双目运输，这个特性就叫运算符的重载。其实，任何使用运算符完成的功能，使用普通的函数...&nbsp;&nbsp;<a href='http://www.cppblog.com/kangnixi/archive/2010/02/17/107972.html'>阅读全文</a><img src ="http://www.cppblog.com/kangnixi/aggbug/107972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-17 17:25 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/17/107972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重载、覆盖和隐藏的比较</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/17/107968.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Wed, 17 Feb 2010 09:04:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/17/107968.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107968.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/17/107968.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107968.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107968.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、&nbsp;重载、覆盖和隐藏的概念</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;①覆盖：覆盖指的是派生类的虚拟函数覆盖了基类的同名且参数相同的函数。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;②重载：必须在一个域中，函数名称相同但是函数参数不同，重载的作用就是同一个函数有不同的行为，因此不是在一个域中的函数是无法构成重载的，这是重载的重要特征。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;③隐藏：是派生类的成员函数隐藏了基类函数的成员函数，在调用一个类的成员函数的时候，编译器会沿着类的继承链逐级向上查找函数的定义，如果找到了就停止查找，所以如果一个派生类和一个基类都有同一个同名（暂且不论参数释放相同）的函数，而编译器最终选择了在派生类中的函数，那么我们就说这个派生类的成员函数&#8220;隐藏&#8221;了基类的成员函数，也就是说它阻止了编译器继续向上查找函数的定义。</span></p>
<p><span style="COLOR: red">2、&nbsp;成员函数被重载的特征</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;①相同的范围（在同一类中）</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;②函数名字相同</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;③参数不同</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;④</span><span>virtual</span><span>关键字可有可无</span></p>
<p style="COLOR: red"><span><span>3、&nbsp;</span></span><span>覆盖的特征</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;①不同的范围（分别位于派生类与基类）</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;②函数名字相同</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;③参数相同</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;④基类函数必须有</span><span>virtual</span><span>关键字</span></p>
<p><span style="COLOR: red">4、&nbsp;&#8220;隐藏&#8221;的规则</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果派生类的函数与基类的函数同名，但是参数不同。此时，不论有无</span><span>virtual</span><span>关键字，基类的函数将被隐藏（注意别与重载混淆）。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果派生类的函数与基类的函数同名，并且参数也相同，但是基类函数没有</span><span>virtual</span><span>关键字。此时，基类的函数被隐藏（注意别于覆盖混淆）。</p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></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;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Base<br><img id=Codehighlighter1_52_223_Open_Image onclick="this.style.display='none'; Codehighlighter1_52_223_Open_Text.style.display='none'; Codehighlighter1_52_223_Closed_Image.style.display='inline'; Codehighlighter1_52_223_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_52_223_Closed_Image onclick="this.style.display='none'; Codehighlighter1_52_223_Closed_Text.style.display='none'; Codehighlighter1_52_223_Open_Image.style.display='inline'; Codehighlighter1_52_223_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_52_223_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_52_223_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img id=Codehighlighter1_86_120_Open_Image onclick="this.style.display='none'; Codehighlighter1_86_120_Open_Text.style.display='none'; Codehighlighter1_86_120_Closed_Image.style.display='inline'; Codehighlighter1_86_120_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_86_120_Closed_Image onclick="this.style.display='none'; Codehighlighter1_86_120_Closed_Text.style.display='none'; Codehighlighter1_86_120_Open_Image.style.display='inline'; Codehighlighter1_86_120_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;f(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;x)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_86_120_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_86_120_Open_Text><span style="COLOR: #000000">{cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Base::f(float)&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">X</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_138_172_Open_Image onclick="this.style.display='none'; Codehighlighter1_138_172_Open_Text.style.display='none'; Codehighlighter1_138_172_Closed_Image.style.display='inline'; Codehighlighter1_138_172_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_138_172_Closed_Image onclick="this.style.display='none'; Codehighlighter1_138_172_Closed_Text.style.display='none'; Codehighlighter1_138_172_Open_Image.style.display='inline'; Codehighlighter1_138_172_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;g(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;x)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_138_172_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_138_172_Open_Text><span style="COLOR: #000000">{cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Base::g(float)&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_190_221_Open_Image onclick="this.style.display='none'; Codehighlighter1_190_221_Open_Text.style.display='none'; Codehighlighter1_190_221_Closed_Image.style.display='inline'; Codehighlighter1_190_221_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_190_221_Closed_Image onclick="this.style.display='none'; Codehighlighter1_190_221_Closed_Text.style.display='none'; Codehighlighter1_190_221_Open_Image.style.display='inline'; Codehighlighter1_190_221_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;h(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;x)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_190_221_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_190_221_Open_Text><span style="COLOR: #000000">{cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Base::h(float)&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Derived:</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Base<br><img id=Codehighlighter1_252_561_Open_Image onclick="this.style.display='none'; Codehighlighter1_252_561_Open_Text.style.display='none'; Codehighlighter1_252_561_Closed_Image.style.display='inline'; Codehighlighter1_252_561_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_252_561_Closed_Image onclick="this.style.display='none'; Codehighlighter1_252_561_Closed_Text.style.display='none'; Codehighlighter1_252_561_Open_Image.style.display='inline'; Codehighlighter1_252_561_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_252_561_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_252_561_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">函数Derived::f(float)覆盖了Base::f(float)</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_326_363_Open_Image onclick="this.style.display='none'; Codehighlighter1_326_363_Open_Text.style.display='none'; Codehighlighter1_326_363_Closed_Image.style.display='inline'; Codehighlighter1_326_363_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_326_363_Closed_Image onclick="this.style.display='none'; Codehighlighter1_326_363_Closed_Text.style.display='none'; Codehighlighter1_326_363_Open_Image.style.display='inline'; Codehighlighter1_326_363_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;f(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;x)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_326_363_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_326_363_Open_Text><span style="COLOR: #000000">{cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Derived::f(float)&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">函数Derived::g(int)隐藏了Base::g(float)，而不是重载</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_423_458_Open_Image onclick="this.style.display='none'; Codehighlighter1_423_458_Open_Text.style.display='none'; Codehighlighter1_423_458_Closed_Image.style.display='inline'; Codehighlighter1_423_458_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_423_458_Closed_Image onclick="this.style.display='none'; Codehighlighter1_423_458_Closed_Text.style.display='none'; Codehighlighter1_423_458_Open_Image.style.display='inline'; Codehighlighter1_423_458_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;g(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_423_458_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_423_458_Open_Text><span style="COLOR: #000000">{cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Derived::g(int)&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">函数Derived::h(float)隐藏了Base::h(float)，而不是覆盖</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_522_559_Open_Image onclick="this.style.display='none'; Codehighlighter1_522_559_Open_Text.style.display='none'; Codehighlighter1_522_559_Closed_Image.style.display='inline'; Codehighlighter1_522_559_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_522_559_Closed_Image onclick="this.style.display='none'; Codehighlighter1_522_559_Closed_Text.style.display='none'; Codehighlighter1_522_559_Open_Image.style.display='inline'; Codehighlighter1_522_559_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;h(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;x)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_522_559_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_522_559_Open_Text><span style="COLOR: #000000">{cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Derived::h(float)&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;</span></div>
<br>想要获得更多内容，可点击<a href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html"><font color=#444444>：《Visual C++代码参考与技巧大全》学习笔记——索引随笔</font></a> <br></span>
<img src ="http://www.cppblog.com/kangnixi/aggbug/107968.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-17 17:04 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/17/107968.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>函数的多态</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/17/107966.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Wed, 17 Feb 2010 08:16:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/17/107966.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107966.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/17/107966.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107966.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107966.html</trackback:ping><description><![CDATA[<br><span style="COLOR: red">1、&nbsp;函数的多态</span>
<p align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;多态可以简单地概括为&#8220;一个接口，多种方法&#8221;，在程序运行的过程中才决定调用的函数。多态是面向对象编程领域的核心概念。</p>
<p align=left><span style="COLOR: red">2、&nbsp;多态的实现</span></p>
<p align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;多态往往借助于虚函数实现，把基类和派生类中相同的函数同时定义为虚函数。在一个含有基类和派生类的程序中，往往各个类中相应的成员函数具有相同的函数名、返回类型和参数表，但函数体不同。在每个类中都有实现相应功能的成员函数。</p>
<p align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当一个派生类的对象的地址赋给一个基类的指针后，基类指针只能访问所属的成员函数，不能访问该派生类对象中与基类成员函数相同的成员函数。但在实际应用中，需要把一个基类或派生类的对象的地址赋给一个基类的指针后，基类指针能够访问基类或派生类中与基类成员函数相同的成员函数。虚函数的定义方法时在成员函数前加关键字virtual。</p>
<p align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当基类和派生类中相同的函数定义为一组虚函数后，通过基类指针可以调用任一类中的虚函数。</p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></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;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Base<br><img id=Codehighlighter1_52_226_Open_Image onclick="this.style.display='none'; Codehighlighter1_52_226_Open_Text.style.display='none'; Codehighlighter1_52_226_Closed_Image.style.display='inline'; Codehighlighter1_52_226_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_52_226_Closed_Image onclick="this.style.display='none'; Codehighlighter1_52_226_Closed_Text.style.display='none'; Codehighlighter1_52_226_Open_Image.style.display='inline'; Codehighlighter1_52_226_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_52_226_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_52_226_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">构造函数和析构函数</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img id=Codehighlighter1_84_108_Open_Image onclick="this.style.display='none'; Codehighlighter1_84_108_Open_Text.style.display='none'; Codehighlighter1_84_108_Closed_Image.style.display='inline'; Codehighlighter1_84_108_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_84_108_Closed_Image onclick="this.style.display='none'; Codehighlighter1_84_108_Closed_Text.style.display='none'; Codehighlighter1_84_108_Open_Image.style.display='inline'; Codehighlighter1_84_108_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;Base()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_84_108_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_84_108_Open_Text><span style="COLOR: #000000">{cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Base构造函数</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_129_153_Open_Image onclick="this.style.display='none'; Codehighlighter1_129_153_Open_Text.style.display='none'; Codehighlighter1_129_153_Closed_Image.style.display='inline'; Codehighlighter1_129_153_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_129_153_Closed_Image onclick="this.style.display='none'; Codehighlighter1_129_153_Closed_Text.style.display='none'; Codehighlighter1_129_153_Open_Image.style.display='inline'; Codehighlighter1_129_153_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Base()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_129_153_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_129_153_Open_Text><span style="COLOR: #000000">{cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Base析构函数</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;foo()<br><img id=Codehighlighter1_190_224_Open_Image onclick="this.style.display='none'; Codehighlighter1_190_224_Open_Text.style.display='none'; Codehighlighter1_190_224_Closed_Image.style.display='inline'; Codehighlighter1_190_224_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_190_224_Closed_Image onclick="this.style.display='none'; Codehighlighter1_190_224_Closed_Text.style.display='none'; Codehighlighter1_190_224_Open_Image.style.display='inline'; Codehighlighter1_190_224_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_190_224_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_190_224_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Base</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_229_232_Open_Image onclick="this.style.display='none'; Codehighlighter1_229_232_Open_Text.style.display='none'; Codehighlighter1_229_232_Closed_Image.style.display='inline'; Codehighlighter1_229_232_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_229_232_Closed_Image onclick="this.style.display='none'; Codehighlighter1_229_232_Closed_Text.style.display='none'; Codehighlighter1_229_232_Open_Image.style.display='inline'; Codehighlighter1_229_232_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_229_232_Closed_Text>/**/</span><span id=Codehighlighter1_229_232_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_233_236_Closed_Text>/**/</span><span id=Codehighlighter1_233_236_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_237_240_Closed_Text>/**/</span><span id=Codehighlighter1_237_240_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_241_299_Closed_Text>/**/</span><span id=Codehighlighter1_241_299_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*******************************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_301_304_Open_Image onclick="this.style.display='none'; Codehighlighter1_301_304_Open_Text.style.display='none'; Codehighlighter1_301_304_Closed_Image.style.display='inline'; Codehighlighter1_301_304_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_301_304_Closed_Image onclick="this.style.display='none'; Codehighlighter1_301_304_Closed_Text.style.display='none'; Codehighlighter1_301_304_Open_Image.style.display='inline'; Codehighlighter1_301_304_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_301_304_Closed_Text>/**/</span><span id=Codehighlighter1_301_304_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_305_308_Closed_Text>/**/</span><span id=Codehighlighter1_305_308_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_309_312_Closed_Text>/**/</span><span id=Codehighlighter1_309_312_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_313_374_Closed_Text>/**/</span><span id=Codehighlighter1_313_374_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">/********************************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;A:</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Base<br><img id=Codehighlighter1_396_545_Open_Image onclick="this.style.display='none'; Codehighlighter1_396_545_Open_Text.style.display='none'; Codehighlighter1_396_545_Closed_Image.style.display='inline'; Codehighlighter1_396_545_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_396_545_Closed_Image onclick="this.style.display='none'; Codehighlighter1_396_545_Closed_Text.style.display='none'; Codehighlighter1_396_545_Open_Image.style.display='inline'; Codehighlighter1_396_545_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_396_545_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_396_545_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img id=Codehighlighter1_413_435_Open_Image onclick="this.style.display='none'; Codehighlighter1_413_435_Open_Text.style.display='none'; Codehighlighter1_413_435_Closed_Image.style.display='inline'; Codehighlighter1_413_435_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_413_435_Closed_Image onclick="this.style.display='none'; Codehighlighter1_413_435_Closed_Text.style.display='none'; Codehighlighter1_413_435_Open_Image.style.display='inline'; Codehighlighter1_413_435_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;A()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_413_435_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_413_435_Open_Text><span style="COLOR: #000000">{cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">A&nbsp;构造函数</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_453_475_Open_Image onclick="this.style.display='none'; Codehighlighter1_453_475_Open_Text.style.display='none'; Codehighlighter1_453_475_Closed_Image.style.display='inline'; Codehighlighter1_453_475_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_453_475_Closed_Image onclick="this.style.display='none'; Codehighlighter1_453_475_Closed_Text.style.display='none'; Codehighlighter1_453_475_Open_Image.style.display='inline'; Codehighlighter1_453_475_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">A()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_453_475_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_453_475_Open_Text><span style="COLOR: #000000">{cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">A&nbsp;析构函数</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;foo()<br><img id=Codehighlighter1_512_543_Open_Image onclick="this.style.display='none'; Codehighlighter1_512_543_Open_Text.style.display='none'; Codehighlighter1_512_543_Closed_Image.style.display='inline'; Codehighlighter1_512_543_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_512_543_Closed_Image onclick="this.style.display='none'; Codehighlighter1_512_543_Closed_Text.style.display='none'; Codehighlighter1_512_543_Open_Image.style.display='inline'; Codehighlighter1_512_543_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_512_543_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_512_543_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_548_551_Open_Image onclick="this.style.display='none'; Codehighlighter1_548_551_Open_Text.style.display='none'; Codehighlighter1_548_551_Closed_Image.style.display='inline'; Codehighlighter1_548_551_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_548_551_Closed_Image onclick="this.style.display='none'; Codehighlighter1_548_551_Closed_Text.style.display='none'; Codehighlighter1_548_551_Open_Image.style.display='inline'; Codehighlighter1_548_551_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_548_551_Closed_Text>/**/</span><span id=Codehighlighter1_548_551_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_552_555_Closed_Text>/**/</span><span id=Codehighlighter1_552_555_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_556_559_Closed_Text>/**/</span><span id=Codehighlighter1_556_559_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_560_618_Closed_Text>/**/</span><span id=Codehighlighter1_560_618_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*******************************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_620_623_Open_Image onclick="this.style.display='none'; Codehighlighter1_620_623_Open_Text.style.display='none'; Codehighlighter1_620_623_Closed_Image.style.display='inline'; Codehighlighter1_620_623_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_620_623_Closed_Image onclick="this.style.display='none'; Codehighlighter1_620_623_Closed_Text.style.display='none'; Codehighlighter1_620_623_Open_Image.style.display='inline'; Codehighlighter1_620_623_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_620_623_Closed_Text>/**/</span><span id=Codehighlighter1_620_623_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_624_627_Closed_Text>/**/</span><span id=Codehighlighter1_624_627_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_628_631_Closed_Text>/**/</span><span id=Codehighlighter1_628_631_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_632_693_Closed_Text>/**/</span><span id=Codehighlighter1_632_693_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">/********************************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;B:</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Base<br><img id=Codehighlighter1_715_856_Open_Image onclick="this.style.display='none'; Codehighlighter1_715_856_Open_Text.style.display='none'; Codehighlighter1_715_856_Closed_Image.style.display='inline'; Codehighlighter1_715_856_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_715_856_Closed_Image onclick="this.style.display='none'; Codehighlighter1_715_856_Closed_Text.style.display='none'; Codehighlighter1_715_856_Open_Image.style.display='inline'; Codehighlighter1_715_856_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_715_856_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_715_856_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img id=Codehighlighter1_732_754_Open_Image onclick="this.style.display='none'; Codehighlighter1_732_754_Open_Text.style.display='none'; Codehighlighter1_732_754_Closed_Image.style.display='inline'; Codehighlighter1_732_754_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_732_754_Closed_Image onclick="this.style.display='none'; Codehighlighter1_732_754_Closed_Text.style.display='none'; Codehighlighter1_732_754_Open_Image.style.display='inline'; Codehighlighter1_732_754_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;B()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_732_754_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_732_754_Open_Text><span style="COLOR: #000000">{cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">B&nbsp;构造函数</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_764_786_Open_Image onclick="this.style.display='none'; Codehighlighter1_764_786_Open_Text.style.display='none'; Codehighlighter1_764_786_Closed_Image.style.display='inline'; Codehighlighter1_764_786_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_764_786_Closed_Image onclick="this.style.display='none'; Codehighlighter1_764_786_Closed_Text.style.display='none'; Codehighlighter1_764_786_Open_Image.style.display='inline'; Codehighlighter1_764_786_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">B()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_764_786_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_764_786_Open_Text><span style="COLOR: #000000">{cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">B&nbsp;析构函数</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;foo()<br><img id=Codehighlighter1_823_854_Open_Image onclick="this.style.display='none'; Codehighlighter1_823_854_Open_Text.style.display='none'; Codehighlighter1_823_854_Closed_Image.style.display='inline'; Codehighlighter1_823_854_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_823_854_Closed_Image onclick="this.style.display='none'; Codehighlighter1_823_854_Closed_Text.style.display='none'; Codehighlighter1_823_854_Open_Image.style.display='inline'; Codehighlighter1_823_854_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_823_854_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_823_854_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">B</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_859_862_Open_Image onclick="this.style.display='none'; Codehighlighter1_859_862_Open_Text.style.display='none'; Codehighlighter1_859_862_Closed_Image.style.display='inline'; Codehighlighter1_859_862_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_859_862_Closed_Image onclick="this.style.display='none'; Codehighlighter1_859_862_Closed_Text.style.display='none'; Codehighlighter1_859_862_Open_Image.style.display='inline'; Codehighlighter1_859_862_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_859_862_Closed_Text>/**/</span><span id=Codehighlighter1_859_862_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_863_866_Closed_Text>/**/</span><span id=Codehighlighter1_863_866_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_867_870_Closed_Text>/**/</span><span id=Codehighlighter1_867_870_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_871_929_Closed_Text>/**/</span><span id=Codehighlighter1_871_929_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*******************************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_931_934_Open_Image onclick="this.style.display='none'; Codehighlighter1_931_934_Open_Text.style.display='none'; Codehighlighter1_931_934_Closed_Image.style.display='inline'; Codehighlighter1_931_934_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_931_934_Closed_Image onclick="this.style.display='none'; Codehighlighter1_931_934_Closed_Text.style.display='none'; Codehighlighter1_931_934_Open_Image.style.display='inline'; Codehighlighter1_931_934_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_931_934_Closed_Text>/**/</span><span id=Codehighlighter1_931_934_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_935_938_Closed_Text>/**/</span><span id=Codehighlighter1_935_938_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_939_942_Closed_Text>/**/</span><span id=Codehighlighter1_939_942_Open_Text><span style="COLOR: #008000">/**/</span></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_943_1004_Closed_Text>/**/</span><span id=Codehighlighter1_943_1004_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">/********************************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_1017_1275_Open_Image onclick="this.style.display='none'; Codehighlighter1_1017_1275_Open_Text.style.display='none'; Codehighlighter1_1017_1275_Closed_Image.style.display='inline'; Codehighlighter1_1017_1275_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1017_1275_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1017_1275_Closed_Text.style.display='none'; Codehighlighter1_1017_1275_Open_Image.style.display='inline'; Codehighlighter1_1017_1275_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1017_1275_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1017_1275_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;Base</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pBase</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;pBase</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;A;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;pBase</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">foo();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(pBase</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">NULL)<br><img id=Codehighlighter1_1100_1148_Open_Image onclick="this.style.display='none'; Codehighlighter1_1100_1148_Open_Text.style.display='none'; Codehighlighter1_1100_1148_Closed_Image.style.display='inline'; Codehighlighter1_1100_1148_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1100_1148_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1100_1148_Closed_Text.style.display='none'; Codehighlighter1_1100_1148_Open_Image.style.display='inline'; Codehighlighter1_1100_1148_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1100_1148_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1100_1148_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pBase;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pBase</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;pBase&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;B;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;pBase</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">foo();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(pBase</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">NULL)<br><img id=Codehighlighter1_1211_1259_Open_Image onclick="this.style.display='none'; Codehighlighter1_1211_1259_Open_Text.style.display='none'; Codehighlighter1_1211_1259_Closed_Image.style.display='inline'; Codehighlighter1_1211_1259_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1211_1259_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1211_1259_Closed_Text.style.display='none'; Codehighlighter1_1211_1259_Open_Image.style.display='inline'; Codehighlighter1_1211_1259_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1211_1259_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1211_1259_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pBase;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pBase</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<p><br>代码的输出结果如下：<br><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/hanshuduotai.PNG" width=237 height=218><br><br>想要获得更多内容，可点击<a href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html">：《Visual C++代码参考与技巧大全》学习笔记——索引随笔</a></p>
<img src ="http://www.cppblog.com/kangnixi/aggbug/107966.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-17 16:16 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/17/107966.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>构造函数和析构函数</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/15/107899.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Mon, 15 Feb 2010 09:35:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/15/107899.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107899.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/15/107899.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107899.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107899.html</trackback:ping><description><![CDATA[&nbsp;
<p><span><span>1、&nbsp;</span></span><span>构造函数和析构函数的定义</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每个类必须有默认的构造函数，没有构造函数就不能创建对象。若没有提供任何函数，那么</span><span>C++</span><span>自动提供一个默认的构造函数，该默认构造函数是一个没有参数的构造函数，它仅仅复制创建对象而不做任何赋值操作。只要类中提供了任意一个构造函数，那么</span><span>C++</span><span>就不再自动提供默认构造函数。析构函数也是特殊的类成员函数，它没有返回类型，没有参数，不能随便调用，也没有重载，只有在类对象的生命周期结束的时候，由系统自动调用。二者的最大不同在于调用期不同，构造函数可以有参数，可以重载。</span></p>
<p><span><span>2、&nbsp;</span></span><span>构造函数和析构函数的应用注意事项</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;①如果构造函数没有参数，声明对象时不要带有括号。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;②构造函数没有返回值，所以不能把它声明为</span><span>void</span><span>函数，尽管它实际上默认为</span><span>void</span><span>类型，也不能声明为</span><span>void</span><span>类型。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;③对一个类而言，可以定义多个重载的构造函数，但是它们必须有完全不同的参数表。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;④析构函数可以为</span><span>virtual</span><span>类型，而构造函数不能为</span><span>virtual</span><span>类型，是因为虚函数采用一种虚调用的办法，虚调用是一种在只有部分信息的情况下的工作机制，特别允许一个只知道接口而不知其准确对象类型的函数访问，但是要创建一个对象，就要知道其准确的类型，因此构造函数不可为虚。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;⑤析构函数可以使内联函数</span></p>
<p><span><span>3、&nbsp;</span></span><span>实例代码</span></p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;代码可参考随笔：<a href="http://www.cppblog.com/kangnixi/archive/2010/02/14/107848.html">C++ primer plus第十一章 使用类的程序<br></a><br>想要获得更多内容，可点击<a href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html"><font color=#444444>：《Visual C++代码参考与技巧大全》学习笔记——索引随笔</font></a>
<img src ="http://www.cppblog.com/kangnixi/aggbug/107899.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-15 17:35 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/15/107899.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struct和class的区别</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/15/107898.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Mon, 15 Feb 2010 09:20:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/15/107898.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107898.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/15/107898.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107898.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107898.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct</span><span>是</span><span>C</span><span>语言的概念，在标准</span><span>C</span><span>中，标准</span><span>C</span><span>中是不允许在结构中声明函数的，而在</span><span>C++</span><span>的类中是可以声明函数的。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但是在</span><span>C++</span><span>中</span><span>struct</span><span>和</span><span>class</span><span>意义一样，唯一不同就是</span><span>struct</span><span>里面默认的访问控制是</span><span>public</span><span>，</span><span>class</span><span>中默认的访问控制是</span><span>private</span><span>。在</span><span>C++</span><span>中</span><span>struct</span><span>中也可以构造函数、析构函数、它们之间也可以继承</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下面的代码演示了</span><span>struct</span><span>继承的例子：</span></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_21_77_Open_Image onclick="this.style.display='none'; Codehighlighter1_21_77_Open_Text.style.display='none'; Codehighlighter1_21_77_Closed_Image.style.display='inline'; Codehighlighter1_21_77_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_21_77_Closed_Image onclick="this.style.display='none'; Codehighlighter1_21_77_Closed_Text.style.display='none'; Codehighlighter1_21_77_Open_Image.style.display='inline'; Codehighlighter1_21_77_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_21_77_Closed_Text>/**/</span><span id=Codehighlighter1_21_77_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*****************************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_79_143_Open_Image onclick="this.style.display='none'; Codehighlighter1_79_143_Open_Text.style.display='none'; Codehighlighter1_79_143_Closed_Image.style.display='inline'; Codehighlighter1_79_143_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_79_143_Closed_Image onclick="this.style.display='none'; Codehighlighter1_79_143_Closed_Text.style.display='none'; Codehighlighter1_79_143_Open_Image.style.display='inline'; Codehighlighter1_79_143_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_79_143_Closed_Text>/**/</span><span id=Codehighlighter1_79_143_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;动物基类<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">/******************************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_155_197_Open_Image onclick="this.style.display='none'; Codehighlighter1_155_197_Open_Text.style.display='none'; Codehighlighter1_155_197_Closed_Image.style.display='inline'; Codehighlighter1_155_197_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_155_197_Closed_Image onclick="this.style.display='none'; Codehighlighter1_155_197_Closed_Text.style.display='none'; Codehighlighter1_155_197_Open_Image.style.display='inline'; Codehighlighter1_155_197_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="COLOR: #0000ff">enum</span><span style="COLOR: #000000">&nbsp;BREED</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_155_197_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_155_197_Open_Text><span style="COLOR: #000000">{GOLDEN,CAING,DANDIE,SHETLAND,DOBERMAN,LAB}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;Animal<br><img id=Codehighlighter1_214_607_Open_Image onclick="this.style.display='none'; Codehighlighter1_214_607_Open_Text.style.display='none'; Codehighlighter1_214_607_Closed_Image.style.display='inline'; Codehighlighter1_214_607_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_214_607_Closed_Image onclick="this.style.display='none'; Codehighlighter1_214_607_Closed_Text.style.display='none'; Codehighlighter1_214_607_Open_Image.style.display='inline'; Codehighlighter1_214_607_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_214_607_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_214_607_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img id=Codehighlighter1_257_258_Open_Image onclick="this.style.display='none'; Codehighlighter1_257_258_Open_Text.style.display='none'; Codehighlighter1_257_258_Closed_Image.style.display='inline'; Codehighlighter1_257_258_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_257_258_Closed_Image onclick="this.style.display='none'; Codehighlighter1_257_258_Closed_Text.style.display='none'; Codehighlighter1_257_258_Open_Image.style.display='inline'; Codehighlighter1_257_258_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;Animal():m_nAge(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">),m_nWeight(</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_257_258_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_257_258_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_270_271_Open_Image onclick="this.style.display='none'; Codehighlighter1_270_271_Open_Text.style.display='none'; Codehighlighter1_270_271_Closed_Image.style.display='inline'; Codehighlighter1_270_271_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_270_271_Closed_Image onclick="this.style.display='none'; Codehighlighter1_270_271_Closed_Text.style.display='none'; Codehighlighter1_270_271_Open_Image.style.display='inline'; Codehighlighter1_270_271_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Animal()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_270_271_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_270_271_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">操作</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img id=Codehighlighter1_305_320_Open_Image onclick="this.style.display='none'; Codehighlighter1_305_320_Open_Text.style.display='none'; Codehighlighter1_305_320_Closed_Image.style.display='inline'; Codehighlighter1_305_320_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_305_320_Closed_Image onclick="this.style.display='none'; Codehighlighter1_305_320_Closed_Text.style.display='none'; Codehighlighter1_305_320_Open_Image.style.display='inline'; Codehighlighter1_305_320_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;GetAge()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_305_320_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_305_320_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;m_nAge;}</span></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">get&nbsp;the&nbsp;age&nbsp;of&nbsp;the&nbsp;animal</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_371_384_Open_Image onclick="this.style.display='none'; Codehighlighter1_371_384_Open_Text.style.display='none'; Codehighlighter1_371_384_Closed_Image.style.display='inline'; Codehighlighter1_371_384_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_371_384_Closed_Image onclick="this.style.display='none'; Codehighlighter1_371_384_Closed_Text.style.display='none'; Codehighlighter1_371_384_Open_Image.style.display='inline'; Codehighlighter1_371_384_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;SetAge(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nAge)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_371_384_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_371_384_Open_Text><span style="COLOR: #000000">{m_nAge</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">nAge;}</span></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">set&nbsp;the&nbsp;age&nbsp;of&nbsp;the&nbsp;animal</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_434_452_Open_Image onclick="this.style.display='none'; Codehighlighter1_434_452_Open_Text.style.display='none'; Codehighlighter1_434_452_Closed_Image.style.display='inline'; Codehighlighter1_434_452_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_434_452_Closed_Image onclick="this.style.display='none'; Codehighlighter1_434_452_Closed_Text.style.display='none'; Codehighlighter1_434_452_Open_Image.style.display='inline'; Codehighlighter1_434_452_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;GetWeight()</span><span style="COLOR: #0000ff">const</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_434_452_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_434_452_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;m_nWeight;}</span></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">get&nbsp;the&nbsp;wight&nbsp;of&nbsp;the&nbsp;animal</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_511_530_Open_Image onclick="this.style.display='none'; Codehighlighter1_511_530_Open_Text.style.display='none'; Codehighlighter1_511_530_Closed_Image.style.display='inline'; Codehighlighter1_511_530_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_511_530_Closed_Image onclick="this.style.display='none'; Codehighlighter1_511_530_Closed_Text.style.display='none'; Codehighlighter1_511_530_Open_Image.style.display='inline'; Codehighlighter1_511_530_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;SetWeight(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nWeight)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_511_530_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_511_530_Open_Text><span style="COLOR: #000000">{m_nWeight</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">nWeight;}</span></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">set&nbsp;the&nbsp;weight&nbsp;of&nbsp;the&nbsp;animal<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">属性</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m_nAge;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m_nWeight;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_610_666_Open_Image onclick="this.style.display='none'; Codehighlighter1_610_666_Open_Text.style.display='none'; Codehighlighter1_610_666_Closed_Image.style.display='inline'; Codehighlighter1_610_666_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_610_666_Closed_Image onclick="this.style.display='none'; Codehighlighter1_610_666_Closed_Text.style.display='none'; Codehighlighter1_610_666_Open_Image.style.display='inline'; Codehighlighter1_610_666_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_610_666_Closed_Text>/**/</span><span id=Codehighlighter1_610_666_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*****************************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_668_727_Open_Image onclick="this.style.display='none'; Codehighlighter1_668_727_Open_Text.style.display='none'; Codehighlighter1_668_727_Closed_Image.style.display='inline'; Codehighlighter1_668_727_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_668_727_Closed_Image onclick="this.style.display='none'; Codehighlighter1_668_727_Closed_Text.style.display='none'; Codehighlighter1_668_727_Open_Image.style.display='inline'; Codehighlighter1_668_727_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_668_727_Closed_Text>/**/</span><span id=Codehighlighter1_668_727_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">/******************************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;Cat:</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Animal<br><img id=Codehighlighter1_754_925_Open_Image onclick="this.style.display='none'; Codehighlighter1_754_925_Open_Text.style.display='none'; Codehighlighter1_754_925_Closed_Image.style.display='inline'; Codehighlighter1_754_925_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_754_925_Closed_Image onclick="this.style.display='none'; Codehighlighter1_754_925_Closed_Text.style.display='none'; Codehighlighter1_754_925_Open_Image.style.display='inline'; Codehighlighter1_754_925_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_754_925_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_754_925_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img id=Codehighlighter1_786_787_Open_Image onclick="this.style.display='none'; Codehighlighter1_786_787_Open_Text.style.display='none'; Codehighlighter1_786_787_Closed_Image.style.display='inline'; Codehighlighter1_786_787_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_786_787_Closed_Image onclick="this.style.display='none'; Codehighlighter1_786_787_Closed_Text.style.display='none'; Codehighlighter1_786_787_Open_Image.style.display='inline'; Codehighlighter1_786_787_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;Cat():m_Breed(GOLDEN)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_786_787_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_786_787_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_796_797_Open_Image onclick="this.style.display='none'; Codehighlighter1_796_797_Open_Text.style.display='none'; Codehighlighter1_796_797_Closed_Image.style.display='inline'; Codehighlighter1_796_797_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_796_797_Closed_Image onclick="this.style.display='none'; Codehighlighter1_796_797_Closed_Text.style.display='none'; Codehighlighter1_796_797_Open_Image.style.display='inline'; Codehighlighter1_796_797_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Cat()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_796_797_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_796_797_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;BREED&nbsp;GetBreed()<br><img id=Codehighlighter1_826_847_Open_Image onclick="this.style.display='none'; Codehighlighter1_826_847_Open_Text.style.display='none'; Codehighlighter1_826_847_Closed_Image.style.display='inline'; Codehighlighter1_826_847_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_826_847_Closed_Image onclick="this.style.display='none'; Codehighlighter1_826_847_Closed_Text.style.display='none'; Codehighlighter1_826_847_Open_Image.style.display='inline'; Codehighlighter1_826_847_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_826_847_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_826_847_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;m_Breed;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;SetBreed(BREED&nbsp;breed)<br><img id=Codehighlighter1_878_898_Open_Image onclick="this.style.display='none'; Codehighlighter1_878_898_Open_Text.style.display='none'; Codehighlighter1_878_898_Closed_Image.style.display='inline'; Codehighlighter1_878_898_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_878_898_Closed_Image onclick="this.style.display='none'; Codehighlighter1_878_898_Closed_Text.style.display='none'; Codehighlighter1_878_898_Open_Image.style.display='inline'; Codehighlighter1_878_898_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_878_898_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_878_898_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Breed</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">breed;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;BREED&nbsp;m_Breed;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_928_984_Open_Image onclick="this.style.display='none'; Codehighlighter1_928_984_Open_Text.style.display='none'; Codehighlighter1_928_984_Closed_Image.style.display='inline'; Codehighlighter1_928_984_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_928_984_Closed_Image onclick="this.style.display='none'; Codehighlighter1_928_984_Closed_Text.style.display='none'; Codehighlighter1_928_984_Open_Image.style.display='inline'; Codehighlighter1_928_984_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_928_984_Closed_Text>/**/</span><span id=Codehighlighter1_928_984_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*****************************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_986_1049_Open_Image onclick="this.style.display='none'; Codehighlighter1_986_1049_Open_Text.style.display='none'; Codehighlighter1_986_1049_Closed_Image.style.display='inline'; Codehighlighter1_986_1049_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_986_1049_Closed_Image onclick="this.style.display='none'; Codehighlighter1_986_1049_Closed_Text.style.display='none'; Codehighlighter1_986_1049_Open_Image.style.display='inline'; Codehighlighter1_986_1049_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_986_1049_Closed_Text>/**/</span><span id=Codehighlighter1_986_1049_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;主函数<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">/******************************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_1062_1352_Open_Image onclick="this.style.display='none'; Codehighlighter1_1062_1352_Open_Text.style.display='none'; Codehighlighter1_1062_1352_Closed_Image.style.display='inline'; Codehighlighter1_1062_1352_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1062_1352_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1062_1352_Closed_Text.style.display='none'; Codehighlighter1_1062_1352_Open_Image.style.display='inline'; Codehighlighter1_1062_1352_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1062_1352_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1062_1352_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;Cat&nbsp;cat;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nAge;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nWeight;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;BREED&nbsp;breed;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cat.SetAge(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cat.SetWeight(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cat.SetBreed(GOLDEN);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;nAge</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">cat.GetAge();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;nWeight</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">cat.GetWeight();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;breed</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">cat.GetBreed();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Age&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">nAge</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Weight&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">nWeight</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">BREED&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">breed</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<br>代码的输出为：<br><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/struct1.PNG"><br><br>想要获得更多内容，可点击：<a id=viewpost1_TitleUrl href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html"><font color=#000000>《Visuanl C++代码参考与技巧大全》学习笔记——索引随笔</font></a> 
<img src ="http://www.cppblog.com/kangnixi/aggbug/107898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-15 17:20 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/15/107898.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++中堆内存操作方法</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/15/107897.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Mon, 15 Feb 2010 08:51:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/15/107897.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107897.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/15/107897.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107897.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107897.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、&nbsp;堆内存的作用</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;程序在内存中有</span><span>4</span><span>个区域，即代码区、全局数据区、栈区和堆区。全局数据区、栈区都是静态分配区域；堆是程序运行时动态使用的一个内存空间，如果要在堆中分配内存空间，必须使用特定的函数和操作符。另外，若不再需要分配的空间则必须释放。</span></p>
<p><span style="COLOR: red">2、&nbsp;堆内存的申请和释放</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;malloc</span><span>与</span><span>free</span><span>和</span><span>new/delete</span><span>是</span><span>C++</span><span>的运算符，它们都可用于申请动态内存和释放内存，但是</span><span>malloc/free</span><span>无法满足动态对象的要求。对象在创建的同时要自动执行构造函数，对象在消亡之前要自动执行析构函数。<span>由于</span></span><span>malloc/free</span><span>是库函数而不是运算符，不在编译器控制权限之内，不能够把执行构造函数和析构函数的任务强加于</span><span>malloc/free</span><span>。</span><span>因此</span><span>C++</span><span>语言需要一个能完成动态内存分配和初始化工作的运算符</span><span>new</span><span>，以及一个能够完成清理和释放内存工作的运算符</span><span>delete</span><span>。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;malloc</span><span>函数的原型为：</span><span></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;malloc(unsigned&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">);</span></div>
<p></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;参数</span><span>unsigned long</span><span>类型的表达式，用来表示需分配的内存单元（单位是字节）数量。函数返回</span><span>void *</span><span>型的指针，指向分配内存块的首地址。由于</span><span>malloc</span><span>函数返回的地址是</span><span>void*</span><span>类型，因此不能直接被使用，所以引用该函数时都必须进行类型转换。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free</span><span>的函数原型为：</span><span></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;free(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">);</span></div>
<p></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用</span><span>malloc</span><span>函数在堆内分配的空间系统不会自动释放，必须由程序设计者在程序中用</span><span>free</span><span>函数来释放。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C++</span><span>所独有的开辟和释放对内存空间的方法——</span><span>new</span><span>修饰符和</span><span>delete</span><span>修饰符，</span><span>new</span><span>和</span><span>delete</span><span>修饰符的操作并不需要头文件的支持，这是</span><span>C++</span><span>所独有的</span><span>new</span><span>操作要比</span><span>malloc</span><span>更为简单，直接说明开辟的类型的数目就可以了，</span><span>delete</span><span>使用的时候如果是数组那么必须使用</span><span>delete[]</span><span>。</span></p>
<p style="COLOR: red"><span><span>3、&nbsp;</span></span><span>实例代码<br>（未完待续）<br><br><span style="COLOR: #000000">想要获得更多内容，可点击：</span><a id=viewpost1_TitleUrl href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html"><font color=#000000>《Visuanl C++代码参考与技巧大全》学习笔记——索引随笔</font></a> </span></p>
<img src ="http://www.cppblog.com/kangnixi/aggbug/107897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-15 16:51 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/15/107897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>杜绝“野”指针</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/15/107895.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Mon, 15 Feb 2010 08:17:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/15/107895.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107895.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/15/107895.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107895.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107895.html</trackback:ping><description><![CDATA[<p>&nbsp; </p>
<p><span style="COLOR: red">1、&nbsp;野指针的概念</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;野指针&#8221;不是</span><span>NULL</span><span>指针，是指向&#8220;垃圾&#8221;内存的指针。在一般情况下不会错用</span><span>NULL</span><span>指针，因为用</span><span>if</span><span>语句很容易判断。但是&#8220;野指针&#8221;是很危险的，</span><span>if</span><span>语句对它不起作用。</span></p>
<p><span style="COLOR: red">2、&nbsp;杜绝野指针的方法</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;杜绝&#8220;野指针&#8221;有</span><span>3</span><span>种主要方法：</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #008080">①</span>指针变量没有被初始化。任何指针变量刚被创建时不会自动成为</span><span>NULL</span><span>指针，它的默认值是随机的，它会乱指一气。所以指针被定义后，一定要初始化。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #008080">②</span>指针</span><span>p</span><span>被释放或删除之后，没有置为</span><span>NULL</span><span>，让人误以为</span><span>p</span><span>是个合法的指针。相反指针被释放后要设为</span><span>NULL</span><span>，以免出错。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #008080">③</span>指针操作超越了变量的作用范围。对指针的操作范围要进行检查，确保越限错误发生率最低。</span></p>
<br>想要获得更多内容，可点击：<a id=viewpost1_TitleUrl href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html"><font color=#000000>《Visuanl C++代码参考与技巧大全》学习笔记——索引随笔</font></a> 
<img src ="http://www.cppblog.com/kangnixi/aggbug/107895.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-15 16:17 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/15/107895.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>传递动态内存</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/15/107894.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Mon, 15 Feb 2010 08:09:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/15/107894.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107894.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/15/107894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107894.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107894.html</trackback:ping><description><![CDATA[&nbsp;
<p style="COLOR: #ff0000"><span>1</span><span>、如果函数的参数是一个指针，不要用该指针去申请动态内存</span></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></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;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;GetMemory(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;num)<br><img id=Codehighlighter1_73_114_Open_Image onclick="this.style.display='none'; Codehighlighter1_73_114_Open_Text.style.display='none'; Codehighlighter1_73_114_Closed_Image.style.display='inline'; Codehighlighter1_73_114_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_73_114_Closed_Image onclick="this.style.display='none'; Codehighlighter1_73_114_Closed_Text.style.display='none'; Codehighlighter1_73_114_Open_Image.style.display='inline'; Codehighlighter1_73_114_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_73_114_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_73_114_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)malloc(</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;num);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Test(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_132_213_Open_Image onclick="this.style.display='none'; Codehighlighter1_132_213_Open_Text.style.display='none'; Codehighlighter1_132_213_Closed_Image.style.display='inline'; Codehighlighter1_132_213_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_132_213_Closed_Image onclick="this.style.display='none'; Codehighlighter1_132_213_Closed_Text.style.display='none'; Codehighlighter1_132_213_Open_Image.style.display='inline'; Codehighlighter1_132_213_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_132_213_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_132_213_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;GetMemory(str,</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">str仍然为NULL</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;strcpy(str,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">运行错误</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif"></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_226_248_Open_Image onclick="this.style.display='none'; Codehighlighter1_226_248_Open_Text.style.display='none'; Codehighlighter1_226_248_Closed_Image.style.display='inline'; Codehighlighter1_226_248_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_226_248_Closed_Image onclick="this.style.display='none'; Codehighlighter1_226_248_Closed_Text.style.display='none'; Codehighlighter1_226_248_Open_Image.style.display='inline'; Codehighlighter1_226_248_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_226_248_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_226_248_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;Test();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上面的代码在编译无错误的，可是在执行时，出现了错误。调试发现，str仍然为NULL。str并没有指向GetMemory()所申请的内存，在函数被调用时，编译器会被调用函数的参数产生一个副本_p，使_p=p，如果函数体内修改_p的内容，那么导致参数p的内容作相应的修改，这就是指针可以作为输出参数的原因。在本例中，_p重新申请了一块内存，只是把_p所指的内存地址改变了，但是p丝毫未变。所以GetMemory并不能返回任何东西。所以str仍然为NULL，导致程序运行错误。事实上，每执行一次GetMemory()，就会造成内存的泄露，因为申请的内存并没有被释放。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #008080"> 如果要用指针参数申请内存，使用指向指针的指针可以完成此功能</span>：</p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></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;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;GetMemory(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">p,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;num)<br><img id=Codehighlighter1_74_116_Open_Image onclick="this.style.display='none'; Codehighlighter1_74_116_Open_Text.style.display='none'; Codehighlighter1_74_116_Closed_Image.style.display='inline'; Codehighlighter1_74_116_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_74_116_Closed_Image onclick="this.style.display='none'; Codehighlighter1_74_116_Closed_Text.style.display='none'; Codehighlighter1_74_116_Open_Image.style.display='inline'; Codehighlighter1_74_116_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_74_116_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_74_116_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)malloc(</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;num);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Test(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_134_252_Open_Image onclick="this.style.display='none'; Codehighlighter1_134_252_Open_Text.style.display='none'; Codehighlighter1_134_252_Closed_Image.style.display='inline'; Codehighlighter1_134_252_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_134_252_Closed_Image onclick="this.style.display='none'; Codehighlighter1_134_252_Closed_Text.style.display='none'; Codehighlighter1_134_252_Open_Image.style.display='inline'; Codehighlighter1_134_252_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_134_252_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_134_252_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;GetMemory(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">str,</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">注意参数是&amp;str，而不是str</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;strcpy(str,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">str</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;free(str);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_265_287_Open_Image onclick="this.style.display='none'; Codehighlighter1_265_287_Open_Text.style.display='none'; Codehighlighter1_265_287_Closed_Image.style.display='inline'; Codehighlighter1_265_287_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_265_287_Closed_Image onclick="this.style.display='none'; Codehighlighter1_265_287_Closed_Text.style.display='none'; Codehighlighter1_265_287_Open_Image.style.display='inline'; Codehighlighter1_265_287_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_265_287_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_265_287_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;Test();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<p><span style="COLOR: #ff0000">2、函数返回值传递动态内存</span></p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;利用函数的返回值传递动态内存，见实例代码：<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></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;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">GetMemory(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;num)<br><img id=Codehighlighter1_66_124_Open_Image onclick="this.style.display='none'; Codehighlighter1_66_124_Open_Text.style.display='none'; Codehighlighter1_66_124_Closed_Image.style.display='inline'; Codehighlighter1_66_124_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_66_124_Closed_Image onclick="this.style.display='none'; Codehighlighter1_66_124_Closed_Text.style.display='none'; Codehighlighter1_66_124_Open_Image.style.display='inline'; Codehighlighter1_66_124_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_66_124_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_66_124_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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">p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)malloc(</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;num);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;p;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Test(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_142_259_Open_Image onclick="this.style.display='none'; Codehighlighter1_142_259_Open_Text.style.display='none'; Codehighlighter1_142_259_Closed_Image.style.display='inline'; Codehighlighter1_142_259_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_142_259_Closed_Image onclick="this.style.display='none'; Codehighlighter1_142_259_Closed_Text.style.display='none'; Codehighlighter1_142_259_Open_Image.style.display='inline'; Codehighlighter1_142_259_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_142_259_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_142_259_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;str</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">GetMemory(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;strcpy(str,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">str</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;free(str);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_272_294_Open_Image onclick="this.style.display='none'; Codehighlighter1_272_294_Open_Text.style.display='none'; Codehighlighter1_272_294_Closed_Image.style.display='inline'; Codehighlighter1_272_294_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_272_294_Closed_Image onclick="this.style.display='none'; Codehighlighter1_272_294_Closed_Text.style.display='none'; Codehighlighter1_272_294_Open_Image.style.display='inline'; Codehighlighter1_272_294_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_272_294_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_272_294_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;Test();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;函数的返回值传递动态内存，内存不能为栈内存，因为该内存再函数结束时自动消亡。<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></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;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">GetMemory(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_63_129_Open_Image onclick="this.style.display='none'; Codehighlighter1_63_129_Open_Text.style.display='none'; Codehighlighter1_63_129_Closed_Image.style.display='inline'; Codehighlighter1_63_129_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_63_129_Closed_Image onclick="this.style.display='none'; Codehighlighter1_63_129_Closed_Text.style.display='none'; Codehighlighter1_63_129_Open_Image.style.display='inline'; Codehighlighter1_63_129_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_63_129_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_63_129_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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">p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello&nbsp;world</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">书上说，这句话编译器应该提出警告，但是vc6没有</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;p;&nbsp;&nbsp;&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Test(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_147_217_Open_Image onclick="this.style.display='none'; Codehighlighter1_147_217_Open_Text.style.display='none'; Codehighlighter1_147_217_Closed_Image.style.display='inline'; Codehighlighter1_147_217_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_147_217_Closed_Image onclick="this.style.display='none'; Codehighlighter1_147_217_Closed_Text.style.display='none'; Codehighlighter1_147_217_Open_Image.style.display='inline'; Codehighlighter1_147_217_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_147_217_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_147_217_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;str</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">GetMemory();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">书上说str的内容是垃圾</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">str</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_230_252_Open_Image onclick="this.style.display='none'; Codehighlighter1_230_252_Open_Text.style.display='none'; Codehighlighter1_230_252_Closed_Image.style.display='inline'; Codehighlighter1_230_252_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_230_252_Closed_Image onclick="this.style.display='none'; Codehighlighter1_230_252_Closed_Text.style.display='none'; Codehighlighter1_230_252_Open_Image.style.display='inline'; Codehighlighter1_230_252_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_230_252_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_230_252_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;Test();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<br>想要获得更多内容，可点击：<a id=viewpost1_TitleUrl href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html"><font color=#000000>《Visuanl C++代码参考与技巧大全》学习笔记——索引随笔</font></a> 
<img src ="http://www.cppblog.com/kangnixi/aggbug/107894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-15 16:09 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/15/107894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>this指针</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/15/107893.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Mon, 15 Feb 2010 07:35:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/15/107893.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107893.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/15/107893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107893.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107893.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、&nbsp;this指针的概念</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this</span><span>指针是一个隐含的指针，它是指向对象本身的，代表了对象的地址。一个类所有的对象调用的成员函数都是同一代码段，那么成员函数又是怎么识别属于不同对象的数据成员呢？</span></p>
<p><span style="COLOR: red">2、&nbsp;this指针的应用</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在对象调用成员函数时，成员函数除了实参外，还接受对象的地址，这个地址被一个隐含的形参</span><span>this</span><span>指针所获取，它等同于执行</span><span>this=&amp;</span><span>对象名。所有对数据成员的访问都隐含地被加上前缀</span><span>this-&gt;</span><span>。例如，</span><span>x=0; </span><span>等价于</span><span>this-&gt;x=0</span><span>。</span></p>
<p><span style="COLOR: red">3、&nbsp;实例代码</span></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></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;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;point<br><img id=Codehighlighter1_53_256_Open_Image onclick="this.style.display='none'; Codehighlighter1_53_256_Open_Text.style.display='none'; Codehighlighter1_53_256_Closed_Image.style.display='inline'; Codehighlighter1_53_256_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_53_256_Closed_Image onclick="this.style.display='none'; Codehighlighter1_53_256_Closed_Text.style.display='none'; Codehighlighter1_53_256_Open_Image.style.display='inline'; Codehighlighter1_53_256_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_53_256_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_53_256_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;point()<br><img id=Codehighlighter1_89_106_Open_Image onclick="this.style.display='none'; Codehighlighter1_89_106_Open_Text.style.display='none'; Codehighlighter1_89_106_Closed_Image.style.display='inline'; Codehighlighter1_89_106_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_89_106_Closed_Image onclick="this.style.display='none'; Codehighlighter1_89_106_Closed_Text.style.display='none'; Codehighlighter1_89_106_Open_Image.style.display='inline'; Codehighlighter1_89_106_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_89_106_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_89_106_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;point(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)<br><img id=Codehighlighter1_129_146_Open_Image onclick="this.style.display='none'; Codehighlighter1_129_146_Open_Text.style.display='none'; Codehighlighter1_129_146_Closed_Image.style.display='inline'; Codehighlighter1_129_146_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_129_146_Closed_Image onclick="this.style.display='none'; Codehighlighter1_129_146_Closed_Text.style.display='none'; Codehighlighter1_129_146_Open_Image.style.display='inline'; Codehighlighter1_129_146_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_129_146_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_129_146_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;output()<br><img id=Codehighlighter1_164_209_Open_Image onclick="this.style.display='none'; Codehighlighter1_164_209_Open_Text.style.display='none'; Codehighlighter1_164_209_Closed_Image.style.display='inline'; Codehighlighter1_164_209_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_164_209_Closed_Image onclick="this.style.display='none'; Codehighlighter1_164_209_Closed_Text.style.display='none'; Codehighlighter1_164_209_Open_Image.style.display='inline'; Codehighlighter1_164_209_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_164_209_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_164_209_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">x&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">y&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">y</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;input(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y)<br><img id=Codehighlighter1_237_254_Open_Image onclick="this.style.display='none'; Codehighlighter1_237_254_Open_Text.style.display='none'; Codehighlighter1_237_254_Closed_Image.style.display='inline'; Codehighlighter1_237_254_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_237_254_Closed_Image onclick="this.style.display='none'; Codehighlighter1_237_254_Closed_Text.style.display='none'; Codehighlighter1_237_254_Open_Image.style.display='inline'; Codehighlighter1_237_254_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_237_254_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_237_254_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">y;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_271_321_Open_Image onclick="this.style.display='none'; Codehighlighter1_271_321_Open_Text.style.display='none'; Codehighlighter1_271_321_Closed_Image.style.display='inline'; Codehighlighter1_271_321_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_271_321_Closed_Image onclick="this.style.display='none'; Codehighlighter1_271_321_Closed_Text.style.display='none'; Codehighlighter1_271_321_Open_Image.style.display='inline'; Codehighlighter1_271_321_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_271_321_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_271_321_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;pt(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;pt.input(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;pt.output();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<br>上面的输出结果如下：<br><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/this1.PNG"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是为什么呢？因为在input函数中，由于变量的可见性，实际上是把形参x赋给了形参x，形参y赋给了形参y。所以，在定义变量的时候，不要使参量和成员变量重名。如果重名了，可以在数据成员的前面加上this指针，以便区别。如果想得到x=10，y=10的结果，input函数可以进行如下的修改：<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;input(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y)<br><img id=Codehighlighter1_26_59_Open_Image onclick="this.style.display='none'; Codehighlighter1_26_59_Open_Text.style.display='none'; Codehighlighter1_26_59_Closed_Image.style.display='inline'; Codehighlighter1_26_59_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_26_59_Closed_Image onclick="this.style.display='none'; Codehighlighter1_26_59_Closed_Text.style.display='none'; Codehighlighter1_26_59_Open_Image.style.display='inline'; Codehighlighter1_26_59_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_26_59_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_26_59_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">).x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">).y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">y;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br>修改后的输出结果如下：<br><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/this2.PNG"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: red">&nbsp;<br>注意</span>：在vc6的编译环境下，如果我这样修改：<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;input(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y)<br><img id=Codehighlighter1_26_53_Open_Image onclick="this.style.display='none'; Codehighlighter1_26_53_Open_Text.style.display='none'; Codehighlighter1_26_53_Closed_Image.style.display='inline'; Codehighlighter1_26_53_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_26_53_Closed_Image onclick="this.style.display='none'; Codehighlighter1_26_53_Closed_Text.style.display='none'; Codehighlighter1_26_53_Open_Image.style.display='inline'; Codehighlighter1_26_53_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_26_53_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_26_53_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">y;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;会提示：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error C2228: left of '.x' must have class/struct/union type<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error C2228: left of '.y' must have class/struct/union type<br><br>想要获得更多内容，可点击：<a id=viewpost1_TitleUrl href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html"><font color=#000000>《Visuanl C++代码参考与技巧大全》学习笔记——索引随笔</font></a> 
<img src ="http://www.cppblog.com/kangnixi/aggbug/107893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-15 15:35 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/15/107893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>指针与引用的区别</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/15/107891.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Mon, 15 Feb 2010 07:16:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/15/107891.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107891.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/15/107891.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107891.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107891.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、&nbsp;指针与引用的区别</span></p>
<p><span style="COLOR: #008080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;①非空区别</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象，因此如果使用一个变量并让它指向一个对象，但是该变量在某些时候也可能不指向任何对象，这时应把变量声明为指针，因为这样可以赋空值给该变量。相反，如果变量肯定指向一个对象，这时可以把变量声明为引用。引用的代码效率比使用指针要高（为什么，可以看汇编）。</span></p>
<p><span style="COLOR: #008080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;②合法性区别</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在使用引用之前不需要测试它的合法性，相反，指针应该总是被测试的，防止其为空。</span></p>
<p><span style="COLOR: #008080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;③可修改区别</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指针可以被重新赋值以指向新的对象，但是引用则总是指向初始化时被指向的对象，以后不能够改变，但是指向的内容可以改变。</span></p>
<p style="COLOR: red"><span><span>2、&nbsp;</span></span><span>实例代码</span></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></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;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_52_337_Open_Image onclick="this.style.display='none'; Codehighlighter1_52_337_Open_Text.style.display='none'; Codehighlighter1_52_337_Closed_Image.style.display='inline'; Codehighlighter1_52_337_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_52_337_Closed_Image onclick="this.style.display='none'; Codehighlighter1_52_337_Closed_Text.style.display='none'; Codehighlighter1_52_337_Open_Image.style.display='inline'; Codehighlighter1_52_337_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_52_337_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_52_337_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;p;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">声明两个字符串数组</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;ch1[</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">abce</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;ch2[</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1234</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ch1;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">p指向ch1</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">p</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ch2;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">p指向ch2</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">p</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">i&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">n&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">对n重新赋值</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">i&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">n&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<br>输出结果如下所示：<br><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/yinyonge.PNG"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;想要获得更多内容，可点击：<a id=viewpost1_TitleUrl href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html"><font color=#000000>《Visuanl C++代码参考与技巧大全》学习笔记——索引随笔</font></a> 
<img src ="http://www.cppblog.com/kangnixi/aggbug/107891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-15 15:16 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/15/107891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数组和指针的区别与处理技巧</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/15/107889.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Mon, 15 Feb 2010 07:04:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/15/107889.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107889.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/15/107889.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107889.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107889.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、&nbsp;获取数组元素的地址</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指针和数组存在特殊的关系，很容易混淆。获取数组第一个元素的地址，可以采用两种方法，第一种采用地址运算符</span><span>&amp;</span><span>来实现，第二种方法直接使用数组的名字。代码如下：</p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img id=Codehighlighter1_14_32_Open_Image onclick="this.style.display='none'; Codehighlighter1_14_32_Open_Text.style.display='none'; Codehighlighter1_14_32_Closed_Image.style.display='inline'; Codehighlighter1_14_32_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_14_32_Closed_Image onclick="this.style.display='none'; Codehighlighter1_14_32_Closed_Text.style.display='none'; Codehighlighter1_14_32_Open_Image.style.display='inline'; Codehighlighter1_14_32_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;dues[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_14_32_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_14_32_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">11.00</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">58.00</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">45.00</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;dp1&nbsp;</span><span style="COLOR: #000000">=&amp;</span><span style="COLOR: #000000">dues[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">或者</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;dp2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dues;</span></div>
<p></span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;进一步讨论如何获取数组中的任何一个值的地址，一<span style="COLOR: #008080">个数组地址后面跟上加号和一个整型表达式，就相当于以该整型表达式作为下标的数组元素的地址</span>。例如：</p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img id=Codehighlighter1_14_32_Open_Image onclick="this.style.display='none'; Codehighlighter1_14_32_Open_Text.style.display='none'; Codehighlighter1_14_32_Closed_Image.style.display='inline'; Codehighlighter1_14_32_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_14_32_Closed_Image onclick="this.style.display='none'; Codehighlighter1_14_32_Closed_Text.style.display='none'; Codehighlighter1_14_32_Open_Image.style.display='inline'; Codehighlighter1_14_32_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;dues[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_14_32_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_14_32_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">11.00</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">58.00</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">45.00</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;dp1&nbsp;</span><span style="COLOR: #000000">=&amp;</span><span style="COLOR: #000000">dues[2</span><span style="COLOR: #000000">]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">或者</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;dp2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dues+2;</span></div>
<p></span></p>
<p><span style="COLOR: red">2、&nbsp;数组和指针的关系</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数组的标识符不像一般变量的标识符，数组标识符不是左值，不能给它赋值，它只是一个进入方括号语法的手段，也是数组存储数据的起始地址。<span style="COLOR: #008080">所以数组的标识符可以看做是只读的指针，而指针的内容是可以改变的。</span>代码参考如下：</span></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;a;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_45_62_Open_Image onclick="this.style.display='none'; Codehighlighter1_45_62_Open_Text.style.display='none'; Codehighlighter1_45_62_Closed_Image.style.display='inline'; Codehighlighter1_45_62_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_45_62_Closed_Image onclick="this.style.display='none'; Codehighlighter1_45_62_Closed_Text.style.display='none'; Codehighlighter1_45_62_Open_Image.style.display='inline'; Codehighlighter1_45_62_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_45_62_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_45_62_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;a[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上面的操作是给数据</span><span>a</span><span>赋初始值。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下面的操作时给数据</span><span>a</span><span>赋值，并把原来的数值覆盖掉。<br></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_22_39_Open_Image onclick="this.style.display='none'; Codehighlighter1_22_39_Open_Text.style.display='none'; Codehighlighter1_22_39_Closed_Image.style.display='inline'; Codehighlighter1_22_39_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_22_39_Closed_Image onclick="this.style.display='none'; Codehighlighter1_22_39_Closed_Text.style.display='none'; Codehighlighter1_22_39_Open_Image.style.display='inline'; Codehighlighter1_22_39_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_22_39_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_22_39_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;p[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
</span><br>&nbsp;&nbsp;想要获得更多内容，可点击：<a id=viewpost1_TitleUrl href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html"><font color=#000000>《Visuanl C++代码参考与技巧大全》学习笔记——索引随笔</font></a> 
<img src ="http://www.cppblog.com/kangnixi/aggbug/107889.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-15 15:04 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/15/107889.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>避免内存泄露的方法</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/15/107878.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Mon, 15 Feb 2010 06:41:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/15/107878.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107878.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/15/107878.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107878.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107878.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、&nbsp;问题阐述</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个大型的</span><span>C++</span><span>程序中最容易出现，也是最头疼的一个问题就是内存泄露，即忘记释放已经申请的内存，造成程序占用的内存不断上升，系统性能不断下降，甚至造成内存耗尽而导致程序崩溃。在</span><span>Java</span><span>中提供自动垃圾回收机制，程序在何时的时机将回收内存，</span><span>C++</span><span>语言一直没有将这种机制作为语言的内部机制，但是它也提供了足够的灵活机制，使开发人员有效地避免内存泄露。</span></p>
<p><span style="COLOR: red">2、&nbsp;内部封装</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以将分配和释放的过程封装到一个类中，即在构造的时候申请内存，析构的时候释放内存，从而保证没有内存泄露。下面是一个简单的封装类。<br></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></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;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;AutoNewDel<br><img id=Codehighlighter1_77_365_Open_Image onclick="this.style.display='none'; Codehighlighter1_77_365_Open_Text.style.display='none'; Codehighlighter1_77_365_Closed_Image.style.display='inline'; Codehighlighter1_77_365_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_77_365_Closed_Image onclick="this.style.display='none'; Codehighlighter1_77_365_Closed_Text.style.display='none'; Codehighlighter1_77_365_Open_Image.style.display='inline'; Codehighlighter1_77_365_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_77_365_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_77_365_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;m_szBuf;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m_nSize;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;AutoNewDel(unsigned&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_166_205_Open_Image onclick="this.style.display='none'; Codehighlighter1_166_205_Open_Text.style.display='none'; Codehighlighter1_166_205_Closed_Image.style.display='inline'; Codehighlighter1_166_205_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_166_205_Closed_Image onclick="this.style.display='none'; Codehighlighter1_166_205_Closed_Text.style.display='none'; Codehighlighter1_166_205_Open_Image.style.display='inline'; Codehighlighter1_166_205_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_166_205_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_166_205_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_szBuf</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[n];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nSize</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">n;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">AutoNewDel()<br><img id=Codehighlighter1_224_321_Open_Image onclick="this.style.display='none'; Codehighlighter1_224_321_Open_Text.style.display='none'; Codehighlighter1_224_321_Closed_Image.style.display='inline'; Codehighlighter1_224_321_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_224_321_Closed_Image onclick="this.style.display='none'; Codehighlighter1_224_321_Closed_Text.style.display='none'; Codehighlighter1_224_321_Open_Image.style.display='inline'; Codehighlighter1_224_321_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_224_321_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_224_321_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_szBuf</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">NULL)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">提供安全机制</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_257_318_Open_Image onclick="this.style.display='none'; Codehighlighter1_257_318_Open_Text.style.display='none'; Codehighlighter1_257_318_Closed_Image.style.display='inline'; Codehighlighter1_257_318_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_257_318_Closed_Image onclick="this.style.display='none'; Codehighlighter1_257_318_Closed_Text.style.display='none'; Codehighlighter1_257_318_Open_Image.style.display='inline'; Codehighlighter1_257_318_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_257_318_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_257_318_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;m_szBuf;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">删除字符数组</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_szBuf</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">防止出现野指针</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;GetBuf()<br><img id=Codehighlighter1_341_362_Open_Image onclick="this.style.display='none'; Codehighlighter1_341_362_Open_Text.style.display='none'; Codehighlighter1_341_362_Closed_Image.style.display='inline'; Codehighlighter1_341_362_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_341_362_Closed_Image onclick="this.style.display='none'; Codehighlighter1_341_362_Closed_Text.style.display='none'; Codehighlighter1_341_362_Open_Image.style.display='inline'; Codehighlighter1_341_362_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_341_362_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_341_362_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;m_szBuf;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;fun()<br><img id=Codehighlighter1_379_484_Open_Image onclick="this.style.display='none'; Codehighlighter1_379_484_Open_Text.style.display='none'; Codehighlighter1_379_484_Closed_Image.style.display='inline'; Codehighlighter1_379_484_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_379_484_Closed_Image onclick="this.style.display='none'; Codehighlighter1_379_484_Closed_Text.style.display='none'; Codehighlighter1_379_484_Open_Image.style.display='inline'; Codehighlighter1_379_484_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_379_484_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_379_484_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;AutoNewDel&nbsp;tmpObj(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tmpObj.GetBuf();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;strcpy(p,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">one&nbsp;world,&nbsp;one&nbsp;dream</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">p</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_497_544_Open_Image onclick="this.style.display='none'; Codehighlighter1_497_544_Open_Text.style.display='none'; Codehighlighter1_497_544_Closed_Image.style.display='inline'; Codehighlighter1_497_544_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_497_544_Closed_Image onclick="this.style.display='none'; Codehighlighter1_497_544_Closed_Text.style.display='none'; Codehighlighter1_497_544_Open_Image.style.display='inline'; Codehighlighter1_497_544_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_497_544_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_497_544_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;fun();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">exit&nbsp;main</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在这个例子中，封装了char类型的内存分配和删除，当声明对象tmpObj时，即可获得相应的内存，而且这个内存再tmpObj对象的作用域推出时自动释放，不需要开发人员显示的调用delete来释放了，避免了由于忘记释放内存而引起的内存泄露错误。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本例给出了一个最基本的思路，但是还是存在很多问题的，比如复制构造函数和复制的问题。下面将演示这个例子的不足，修改函数fun()，增加一个赋值语句，如下：<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;fun()<br><img id=Codehighlighter1_11_154_Open_Image onclick="this.style.display='none'; Codehighlighter1_11_154_Open_Text.style.display='none'; Codehighlighter1_11_154_Closed_Image.style.display='inline'; Codehighlighter1_11_154_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_11_154_Closed_Image onclick="this.style.display='none'; Codehighlighter1_11_154_Closed_Text.style.display='none'; Codehighlighter1_11_154_Open_Image.style.display='inline'; Codehighlighter1_11_154_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_11_154_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_11_154_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;AutoNewDel&nbsp;tmpObj(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;AutoNewDel&nbsp;tmpObj2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">tmpObj;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里是增加的语句</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tmpObj.GetBuf();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;strcpy(p,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">one&nbsp;world,&nbsp;one&nbsp;dream</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">p</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在这个类中并没有实现复制构造函数，因此编译器自动构造一个默认的复制构造函数，执行位复制操作，即将对象tmpObj的内容逐字地复制到对象tmpObj2中，两个对象中的m_szBuf指向同一块内存，当对象销毁时，<span style="COLOR: red">m_szBuf会被销毁两次，从而造成程序错误（本博客还有一篇随笔说明相关的内容，随笔地址为：<font color=#000000><a href="http://www.cppblog.com/kangnixi/archive/2010/02/14/107848.html"><font color=#000000>C++ primer plus第十一章 使用类的程序</font></a></font>）</span>。简单的解决办法就是禁止复制构造函数，在类中声明复制构造函数为私有。但是这样治标不治本，它限制类的功能实现。可以通过一个引用一个计数的方法，即避免了对同一块内存的多次删除，也允许复制构造函数。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;引用的计数的原理是这样的，就是对要使用的内存维护一个计数器，记录当前有多少指针指向这块内存。当有指针指向这块内存时，计数器加1；反之，当指向这块内存指针销毁时，计数器减1。当这块内存的计数器为0时，才允许删除这块内存。可以在类的构造函数和析构函数中分别完成加1和减1的操作。代码如下：<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></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;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;AutoNewDel<br><img id=Codehighlighter1_77_876_Open_Image onclick="this.style.display='none'; Codehighlighter1_77_876_Open_Text.style.display='none'; Codehighlighter1_77_876_Closed_Image.style.display='inline'; Codehighlighter1_77_876_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_77_876_Closed_Image onclick="this.style.display='none'; Codehighlighter1_77_876_Closed_Text.style.display='none'; Codehighlighter1_77_876_Open_Image.style.display='inline'; Codehighlighter1_77_876_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_77_876_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_77_876_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Attribute</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;m_szBuf;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m_nSize;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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">&nbsp;m_count;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">新增加的语句</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;AutoNewDel(unsigned&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">在构造函数中申请内存</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_216_338_Open_Image onclick="this.style.display='none'; Codehighlighter1_216_338_Open_Text.style.display='none'; Codehighlighter1_216_338_Closed_Image.style.display='inline'; Codehighlighter1_216_338_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_216_338_Closed_Image onclick="this.style.display='none'; Codehighlighter1_216_338_Closed_Text.style.display='none'; Codehighlighter1_216_338_Open_Image.style.display='inline'; Codehighlighter1_216_338_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_216_338_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_216_338_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_szBuf</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[n];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nSize</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">n;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">新增加的语句</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_count</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">m_count</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">count&nbsp;is&nbsp;:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;*</span><span style="COLOR: #000000">m_count</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">新增加的复制构造函数</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;AutoNewDel(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;AutoNewDel&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;s)<br><img id=Codehighlighter1_390_511_Open_Image onclick="this.style.display='none'; Codehighlighter1_390_511_Open_Text.style.display='none'; Codehighlighter1_390_511_Closed_Image.style.display='inline'; Codehighlighter1_390_511_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_390_511_Closed_Image onclick="this.style.display='none'; Codehighlighter1_390_511_Closed_Text.style.display='none'; Codehighlighter1_390_511_Open_Image.style.display='inline'; Codehighlighter1_390_511_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_390_511_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_390_511_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nSize</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">s.m_nSize;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_szBuf</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">s.m_szBuf;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_count</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">s.m_count;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">m_count)</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">count&nbsp;is&nbsp;:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;*</span><span style="COLOR: #000000">m_count</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">AutoNewDel()<br><img id=Codehighlighter1_529_832_Open_Image onclick="this.style.display='none'; Codehighlighter1_529_832_Open_Text.style.display='none'; Codehighlighter1_529_832_Closed_Image.style.display='inline'; Codehighlighter1_529_832_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_529_832_Closed_Image onclick="this.style.display='none'; Codehighlighter1_529_832_Closed_Text.style.display='none'; Codehighlighter1_529_832_Open_Image.style.display='inline'; Codehighlighter1_529_832_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_529_832_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_529_832_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">m_count)</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">count&nbsp;is&nbsp;:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;*</span><span style="COLOR: #000000">m_count</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">新增加的两条语句</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">m_count</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_619_829_Open_Image onclick="this.style.display='none'; Codehighlighter1_619_829_Open_Text.style.display='none'; Codehighlighter1_619_829_Closed_Image.style.display='inline'; Codehighlighter1_619_829_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_619_829_Closed_Image onclick="this.style.display='none'; Codehighlighter1_619_829_Closed_Text.style.display='none'; Codehighlighter1_619_829_Open_Image.style.display='inline'; Codehighlighter1_619_829_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_619_829_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_619_829_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">buf&nbsp;is&nbsp;deleted</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_szBuf</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">NULL)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">提供安全机制</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_687_825_Open_Image onclick="this.style.display='none'; Codehighlighter1_687_825_Open_Text.style.display='none'; Codehighlighter1_687_825_Closed_Image.style.display='inline'; Codehighlighter1_687_825_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_687_825_Closed_Image onclick="this.style.display='none'; Codehighlighter1_687_825_Closed_Text.style.display='none'; Codehighlighter1_687_825_Open_Image.style.display='inline'; Codehighlighter1_687_825_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_687_825_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_687_825_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;m_szBuf;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">删除字符数组</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_szBuf</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">防止出现野指针</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_count</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">NULL)<br><img id=Codehighlighter1_774_820_Open_Image onclick="this.style.display='none'; Codehighlighter1_774_820_Open_Text.style.display='none'; Codehighlighter1_774_820_Closed_Image.style.display='inline'; Codehighlighter1_774_820_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_774_820_Closed_Image onclick="this.style.display='none'; Codehighlighter1_774_820_Closed_Text.style.display='none'; Codehighlighter1_774_820_Open_Image.style.display='inline'; Codehighlighter1_774_820_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_774_820_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_774_820_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;m_count;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_count</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;GetBuf()<br><img id=Codehighlighter1_852_873_Open_Image onclick="this.style.display='none'; Codehighlighter1_852_873_Open_Text.style.display='none'; Codehighlighter1_852_873_Closed_Image.style.display='inline'; Codehighlighter1_852_873_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_852_873_Closed_Image onclick="this.style.display='none'; Codehighlighter1_852_873_Closed_Text.style.display='none'; Codehighlighter1_852_873_Open_Image.style.display='inline'; Codehighlighter1_852_873_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_852_873_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_852_873_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;m_szBuf;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;fun()<br><img id=Codehighlighter1_890_1077_Open_Image onclick="this.style.display='none'; Codehighlighter1_890_1077_Open_Text.style.display='none'; Codehighlighter1_890_1077_Closed_Image.style.display='inline'; Codehighlighter1_890_1077_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_890_1077_Closed_Image onclick="this.style.display='none'; Codehighlighter1_890_1077_Closed_Text.style.display='none'; Codehighlighter1_890_1077_Open_Image.style.display='inline'; Codehighlighter1_890_1077_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_890_1077_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_890_1077_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;AutoNewDel&nbsp;tmpObj(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tmpObj.GetBuf();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;strcpy(p,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">one&nbsp;world,&nbsp;one&nbsp;dream</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">p</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;AutoNewDel&nbsp;tmpObj2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">tmpObj;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">tmpObj2.m_szBuf&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">tmpObj2.GetBuf()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_1090_1137_Open_Image onclick="this.style.display='none'; Codehighlighter1_1090_1137_Open_Text.style.display='none'; Codehighlighter1_1090_1137_Closed_Image.style.display='inline'; Codehighlighter1_1090_1137_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1090_1137_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1090_1137_Closed_Text.style.display='none'; Codehighlighter1_1090_1137_Open_Image.style.display='inline'; Codehighlighter1_1090_1137_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1090_1137_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1090_1137_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;fun();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">exit&nbsp;main</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<br>程序输出结果如下：<br><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/baohu.PNG"><br><br>想要获得更多内容，可点击：<a id=viewpost1_TitleUrl href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html"><font color=#000000>《Visuanl C++代码参考与技巧大全》学习笔记——索引随笔</font></a> 
<img src ="http://www.cppblog.com/kangnixi/aggbug/107878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-15 14:41 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/15/107878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内存分配的不同方式</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/15/107876.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Mon, 15 Feb 2010 06:04:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/15/107876.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107876.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/15/107876.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107876.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107876.html</trackback:ping><description><![CDATA[<p>&nbsp; </p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;内存管理是</span><span>C++</span><span>最重要的一部分，也是</span><span>C++</span><span>最有争议的问题。用户可以从内存管理获得更大的自由度及更好的性能优化，但同时也带来极大的隐患，如果用不好很容易造成内存的泄露，因此，如意要真正掌握</span><span>C++</span><span>的核心，必须要精通</span><span>C++</span><span>的内存管理机制。目前的</span><span>Java</span><span>和</span><span>.NET</span><span>都提供了内存管理的自动机制，但是是以牺牲对使用内存的支配权为代价的，放弃了</span><span>C++</span><span>的绝对优越性。</span></p>
<p><span style="COLOR: red">1、&nbsp;程序的内存区</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一般而言，计算机的内存区域由<span style="COLOR: #008080">代码</span>和<span style="COLOR: #008080">数据</span>组成，这两个部分也是影响一个程序所需内存的重要因素。代码是允许的指令，例如数学运算、比较、跳转即函数调用等，其大小通常是由程序的功能及复杂程度决定的。当然，正确地使用程序的编写技巧及编程语言的语法特性会优化产生代码的大小，数据是代码要处理的对象。一个程序占用的内存区域一般分为</span><span>5</span><span>种，它们是：全局</span><span>/</span><span>静态数据区、常用数据区、代码区、栈、堆等。程序的代码存储在代码区中，而程序的数据则要根据数据种类的不同，存储在不同的内存区。</span></p>
<p><span style="COLOR: red">2、&nbsp;内存的分配方式</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;①<span>&nbsp;</span></span></span><span>从静态存储区域分配。内存在程序编译的时候就已经分配好，这块内存在程序的整个运行期间都存在。例如，全局变量、</span><span>static</span><span>变量及字符串常量。这部分存储区是在程序编译阶段已分配好，在整个程序运行过程中始终存在，用于存储全局变量、静态变量及字符串常量等。其中，<span style="COLOR: #008080">字符串常量的存储区域是不可修改的内存区域</span>，如下面的这段代码会导致程序运行中断：<br></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></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;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_52_270_Open_Image onclick="this.style.display='none'; Codehighlighter1_52_270_Open_Text.style.display='none'; Codehighlighter1_52_270_Closed_Image.style.display='inline'; Codehighlighter1_52_270_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_52_270_Closed_Image onclick="this.style.display='none'; Codehighlighter1_52_270_Closed_Text.style.display='none'; Codehighlighter1_52_270_Open_Image.style.display='inline'; Codehighlighter1_52_270_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_52_270_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_52_270_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">指向一个字符串常量</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pLocalString&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">this&nbsp;is&nbsp;a&nbsp;test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_108_209_Open_Image onclick="this.style.display='none'; Codehighlighter1_108_209_Open_Text.style.display='none'; Codehighlighter1_108_209_Closed_Image.style.display='inline'; Codehighlighter1_108_209_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_108_209_Closed_Image onclick="this.style.display='none'; Codehighlighter1_108_209_Closed_Text.style.display='none'; Codehighlighter1_108_209_Open_Image.style.display='inline'; Codehighlighter1_108_209_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_108_209_Closed_Text>/**/</span><span id=Codehighlighter1_108_209_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;下面这句提示错误：error&nbsp;C2440:&nbsp;'='&nbsp;:&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;cannot&nbsp;convert&nbsp;from&nbsp;'const&nbsp;char'&nbsp;to&nbsp;'char&nbsp;*'<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;试图修改不可修改的内存区<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;pLocalString</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">#</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">cout&lt;&lt;pLocalString&lt;&lt;endl;</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<p></span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;②从栈上创建。<span style="COLOR: #008080">在执行函数时，函数局部变量的存储单元都可以在栈上创建</span>，函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中，效率很高，但是分配的内存容量有限。<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;③在栈上分配，亦称动态内存分配。程序在运行的时候用malloc或new申请任意多的内存，程序员自己负责在何时用free或delete释放内存。动态内存生存期由程序员决定，使用非常灵活，但问题也最多，很容易造成内存泄露。</span></p>
<p><span><span>3、&nbsp;</span></span><span>代码参考<br></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过下面的程序，来说明各种类型的数据在内存中的位置。&nbsp;</p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nGlobal</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_67_849_Open_Image onclick="this.style.display='none'; Codehighlighter1_67_849_Open_Text.style.display='none'; Codehighlighter1_67_849_Closed_Image.style.display='inline'; Codehighlighter1_67_849_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_67_849_Closed_Image onclick="this.style.display='none'; Codehighlighter1_67_849_Closed_Text.style.display='none'; Codehighlighter1_67_849_Open_Image.style.display='inline'; Codehighlighter1_67_849_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_67_849_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_67_849_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;szLocalString1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">LocalString1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</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;szLocalString2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">LocalString2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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;nStatic&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLocal</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLocalConst</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pNew</span><span style="COLOR: #000000">=</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">5</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;szMalloc</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)malloc(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">global&nbsp;variable:0x%x\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">nGlobal);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">static&nbsp;variable:0x%x\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">nStatic);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">local&nbsp;expression&nbsp;1:0x%x\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,szLocalString1);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">local&nbsp;expression&nbsp;2:0x%x\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,szLocalString2);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">new&nbsp;0x%x\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">pNew);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">local&nbsp;pointer(szLocalString1):0x%x\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">szLocalString1);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">local&nbsp;pointer(szLocalString2):0x%x\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">szLocalString2);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">local&nbsp;variable:0x%x\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">nLocal);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">local&nbsp;pointer(szMalloc):0x%x\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">szMalloc);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">local&nbsp;const&nbsp;variable:0x%x\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">nLocalConst);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输出结果如下：<br><img border=0 src="http://www.cppblog.com/images/cppblog_com/kangnixi/neicun.PNG"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;想要获得更多内容，可点击：<a id=viewpost1_TitleUrl href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html"><font color=#000000>《Visuanl C++代码参考与技巧大全》学习笔记——索引随笔</font></a> 
<img src ="http://www.cppblog.com/kangnixi/aggbug/107876.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-15 14:04 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/15/107876.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dll工程的调试技巧</title><link>http://www.cppblog.com/kangnixi/archive/2010/01/29/106760.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Fri, 29 Jan 2010 12:13:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/01/29/106760.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/106760.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/01/29/106760.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/106760.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/106760.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、调试dll的概述</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由于</span><span>dll</span><span>本身是不可执行的，所以给开发和调试工作带来了一定得难度，在</span><span>VC++</span><span>中如何调试</span><span>dll</span><span>程序呢？提供了两种解决办法</span></p>
<p><span style="COLOR: red">2、调试dll的技巧</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;打开应用程序的工程，选择【</span><span>Project</span><span>】—</span><span>&gt;</span><span>【</span><span>Settings</span><span>】菜单命令，在弹出对话框的&#8220;</span><span>Debug</span><span>&#8221;标签下，&#8220;</span><span>Category</span><span>&#8221;选择&#8220;</span><span>General</span><span>&#8221;，在&#8220;</span><span>Program Arguments</span><span>&#8221;中指定应用程序命令行参数。&#8220;</span><span>Category</span><span>&#8221;选择&#8220;</span><span>Additional dlls</span><span>&#8221;，输入调试的</span><span>dll</span><span>文件，如果使用远程调试，要给出完整的网络路径。这个</span><span>dll</span><span>必须编译成</span><span>Debug</span><span>版本的程序，包含有调试信息。这样尽管</span><span>dll</span><span>源不是这个工程的组成部分，也可以在应用程序和</span><span>dll</span><span>的源程序中设置断点。同时使用应用程序的工程来调用</span><span>dll</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在同一个工程区内打开</span><span>dll</span><span>和应用程序，这样就要求把</span><span>dll</span><span>程序的工程添加到应用程序的工作区中。为了能够调试</span><span>dll</span><span>程序，两个工程都是用相同版本的</span><span>Debug</span><span>。在【</span><span>Project</span><span>】—</span><span>&gt;</span><span>【</span><span>Settings</span><span>】对话框的&#8220;</span><span>Link</span><span>&#8221;标签下选中&#8220;</span><span>Generate debug info</span><span>&#8221;。在【</span><span>Project</span><span>】—</span><span>&gt;</span><span>【</span><span>Settings</span><span>】对话框的&#8220;</span><span>Debug</span><span>&#8221;标签下，&#8220;</span><span>Category</span><span>&#8221;选择&#8220;</span><span>Additional DLLs</span><span>&#8221;，将要调试的</span><span>dll</span><span>文件加入其中。同时，在【</span><span>Project</span><span>】—</span><span>&gt;</span><span>【</span><span>Settings</span><span>】对话框中选择应用程序的工程依赖于</span><span>dll</span><span>的工程，在</span><span>dll</span><span>程序调用时，编译用户应用程序，可以根据文件新旧比较把</span><span>dll</span><span>的工程也编译连接。</span><span>dll</span><span>工程调用后，编译连接生成新版本调试信息，为了操作方便可以在</span><span>dll</span><span>工程的&#8220;</span><span>Project Settings</span><span>&#8221;对话框中的&#8220;</span><span>Post-Build Step</span><span>&#8221;标签下加上将编译好的</span><span>dll</span><span>复制到应用程序访问到的目录的一个命令。每编译一次，就要执行一次这个命令，将最新生成的</span><span>dll</span><span>文件提交给应用程序是用。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过上面的设置就可以通过应用程序来对</span><span>dll</span><span>程序进行调试了，在调试过程中，可以从应用程序单步跟踪到</span><span>dll</span><span>工程中，在</span><span>dll</span><span>中设置断点，在应用程序中调用</span><span>dll</span><span>，执行到此时，也会中断，从而达到了调试的目的。</span></p>
<img src ="http://www.cppblog.com/kangnixi/aggbug/106760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-01-29 20:13 <a href="http://www.cppblog.com/kangnixi/archive/2010/01/29/106760.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用GetLastError()的返回值确定错误信息</title><link>http://www.cppblog.com/kangnixi/archive/2010/01/29/106759.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Fri, 29 Jan 2010 12:06:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/01/29/106759.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/106759.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/01/29/106759.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/106759.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/106759.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、GetLastError()函数作用</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个函数可以获得一个系统的错误代码，通过错误代码得到程序的问题所在，错误代码可以在</span><span>MSDN</span><span>上查到：</span><span>System Errors - Numerical Order</span></p>
<p><span style="COLOR: red">2、代码参考</span></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">stdafx.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">windows.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></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;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br><img id=Codehighlighter1_130_302_Open_Image onclick="this.style.display='none'; Codehighlighter1_130_302_Open_Text.style.display='none'; Codehighlighter1_130_302_Closed_Image.style.display='inline'; Codehighlighter1_130_302_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_130_302_Closed_Image onclick="this.style.display='none'; Codehighlighter1_130_302_Closed_Text.style.display='none'; Codehighlighter1_130_302_Open_Image.style.display='inline'; Codehighlighter1_130_302_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_130_302_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_130_302_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="COLOR: #0000ff">short</span><span style="COLOR: #000000">&nbsp;us</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(unsigned&nbsp;</span><span style="COLOR: #0000ff">short</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">6553658</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;errorcode</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">GetLastError();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;sz[</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;sprintf(sz,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">error&nbsp;%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,errorcode);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,sz,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Tip</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,MB_OK);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<p>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在函数调用、内存申请、数值计算时，在出错的地方尽量多调用</span><span>GetLastError()</span><span>。</span></p>
<img src ="http://www.cppblog.com/kangnixi/aggbug/106759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-01-29 20:06 <a href="http://www.cppblog.com/kangnixi/archive/2010/01/29/106759.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Try-Catch的使用技巧</title><link>http://www.cppblog.com/kangnixi/archive/2010/01/29/106757.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Fri, 29 Jan 2010 12:00:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/01/29/106757.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/106757.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/01/29/106757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/106757.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/106757.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、技巧阐述</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;提倡在程序当中多使用</span><span>Try-Catch</span><span>，用此结构来捕获代码运行当中产生的突发错误。比如说，对于用</span><span>ADO</span><span>操作的数据库，那么打开的过程就写在</span><span>try</span><span>语句里。对于数据流的写入存储操作，也要用其来捕获错误。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try-catch</span><span>语句由一个</span><span>try</span><span>块和其后所跟的一个或多个</span><span>catch</span><span>子句构成，每个子句为不同的异常指定处理程序。</span><span>try</span><span>关键词后跟可能出错的语句，</span><span>catch</span><span>子句后跟相应错误的处理语句。</span></p>
<p><span style="COLOR: red">2、代码参考</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>因原来做</span><span>Java</span><span>或</span><span>C#</span><span>项目的时候经常用到</span><span>try-catch</span><span>，这里就不尝试了。只附上书上说的一些不错的话。抱歉了。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在进行内存申请、函数调用、数据库操作时，多用此语句，以便处理错误信息。</span></p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/kangnixi/aggbug/106757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-01-29 20:00 <a href="http://www.cppblog.com/kangnixi/archive/2010/01/29/106757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TRACE调试技巧</title><link>http://www.cppblog.com/kangnixi/archive/2010/01/29/106756.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Fri, 29 Jan 2010 11:57:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/01/29/106756.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/106756.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/01/29/106756.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/106756.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/106756.html</trackback:ping><description><![CDATA[&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE()的作用是在Output中输出调试信息。（这是书上的话，有点没看懂）</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: red">我网上搜索了一下，有的是这么说的：</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;TRACE宏对于VC下程序调试来说是很有用的东西，有着类似printf的功能；该宏仅仅在程序的DEBUG版本中出现，当RELEASE的时候该宏就完全消失了，从而帮助你调式也在RELEASE的时候减少代码量。 </p>
<p>　　使用非常简单，格式如下： </p>
<p>　　TRACE("DDDDDDDDDDD"); </p>
<p>　　TRACE("wewe%d",333); </p>
<p>　　同样还存在TRACE0，TRACE1，TRACE2。。。分别对应0，1，2。。个参数 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE信息输出到VC IDE环境的输出窗口（该窗口是你编译项目出错提示的哪个窗口），但仅限于你在VC中运行你的DEBUG版本的程序。&#8221;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: red">觉得这个解释是比较不错，容易看懂的。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: red">同时，搜到一个东西，也没看懂，但觉得挺好的，说不定以后会用到，就贴这了。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近在做一个小工程，由于中间的算法比较繁琐，也非常杂乱，哪一个环节出了差错，全盘皆乱，特别希望在需要的地方输出一个监视值，以监视中间的算法执行情况，首先想到了设断点调试，但是每次都是在不断中断程序的情况下，非常不方便，试了一下TRACE，但是也必须在DEBUG调试模式下进行，感觉非常痛苦。偶一日，翻看候sir的深入浅出MFC，在附录里提供了一个以MFC重建DBWIN的详细解说，顿时欣喜若狂，仔细研读，里面提供了很多方法，但是我还是喜欢DBWIN这个工具，God，真是救我于水火阿，DBWIN这个程序已经给我们提供了，就在MSDN中，可以轻松获得，呵呵，这个可是鼎鼎大名的Paul DiLascia做出来的，不用怀疑它的功能，但是每次要使用这个工具的时候都必须修改源代码，确实比较麻烦，而且，还要注意调用初始化程序的位置，觉得有点不爽，稍微看了一下要求包含的一个头文件，和所要调用的初始化程序，心里盘算着能不能在生成DEBUG程序的情况下自己添加呢，初始化必须最先调用，对，构造一个全局对象，于是自己写了一个类，把初始化程序放在全局对象的构造函数中，源程序如下：</p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">MyTrace.h</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">#ifndef&nbsp;__MYTRACE_H__<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;__MYTRACE_H__</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#ifdef&nbsp;_DEBUG<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">tracewin.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;MyTrace<br><img id=Codehighlighter1_105_209_Open_Image onclick="this.style.display='none'; Codehighlighter1_105_209_Open_Text.style.display='none'; Codehighlighter1_105_209_Closed_Image.style.display='inline'; Codehighlighter1_105_209_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_105_209_Closed_Image onclick="this.style.display='none'; Codehighlighter1_105_209_Closed_Text.style.display='none'; Codehighlighter1_105_209_Open_Image.style.display='inline'; Codehighlighter1_105_209_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_105_209_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_105_209_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyTrace()<br><img id=Codehighlighter1_146_187_Open_Image onclick="this.style.display='none'; Codehighlighter1_146_187_Open_Text.style.display='none'; Codehighlighter1_146_187_Closed_Image.style.display='inline'; Codehighlighter1_146_187_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_146_187_Closed_Image onclick="this.style.display='none'; Codehighlighter1_146_187_Closed_Text.style.display='none'; Codehighlighter1_146_187_Open_Image.style.display='inline'; Codehighlighter1_146_187_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_146_187_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_146_187_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::MfxTraceInit();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_206_207_Open_Image onclick="this.style.display='none'; Codehighlighter1_206_207_Open_Text.style.display='none'; Codehighlighter1_206_207_Closed_Image.style.display='inline'; Codehighlighter1_206_207_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_206_207_Closed_Image onclick="this.style.display='none'; Codehighlighter1_206_207_Closed_Text.style.display='none'; Codehighlighter1_206_207_Open_Image.style.display='inline'; Codehighlighter1_206_207_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">MyTrace()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_206_207_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_206_207_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">MyTrace&nbsp;_mytrace;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">_DEBUG</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">__MYRTACE_H__</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把这个文件和&lt;tracewin.h&gt;这两个文件放在了默认包含目录下，如果要使用DBWIN的时候只要把mytrace.h这个文件包含在你的程序里面就行了，最好是包含在构建theApp的那个文件中，这样可以监视你程序中想要监视的所有过程，哇，确实方便了许多。打开DBWIN窗口，你所加入的TRACE字符串清清楚楚的出现在监视窗口，你甚至不用开VC环境，自己运行你所生成的DEBUG程序，这样如果你要同时调试几个程序，如关系到程序间的通讯的，非常方便，看得也非常痛快。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但是每次还要包含一个头文件，还是有点麻烦，可否把这个文件内嵌到AfxWin的头文件中呢，因为要编写MFC程序，这个头文件是必须包含的，赶紧try一下，不对，出现错误了，好像是出现重复定义，但是这个头文件已经使用预编译指令保证了不出现重复定义了阿，查看有关资料关于这个连接错误，哦，好像是由于VC的一些关系引起的，但是努力了好长时间还是没法解决，贴出这篇文章想请教各位大虾，也许你们对于TRACE有更好的方法，望赐教，对于我所出现的错误你们有更好的解决方法，也望告知，感激不尽。这里留下我的Mail，<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#100;&#121;&#114;&#111;&#114;&#111;&#64;&#49;&#54;&#51;&#46;&#99;&#111;&#109;">dyroro@163.com</a></p>
<img src ="http://www.cppblog.com/kangnixi/aggbug/106756.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-01-29 19:57 <a href="http://www.cppblog.com/kangnixi/archive/2010/01/29/106756.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASSERT()调试技巧</title><link>http://www.cppblog.com/kangnixi/archive/2010/01/29/106755.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Fri, 29 Jan 2010 11:53:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/01/29/106755.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/106755.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/01/29/106755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/106755.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/106755.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、ASSERT()的应用</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT()</span><span>是调试程序时经常使用的宏，在程序运行时它计算括号内的表达式，如果表达式为</span><span>FALSE(0)</span><span>，程序将报告错误，并终止执行。如果表达式不为</span><span>0</span><span>，则继续执行后面的语句。这个宏通常判断原来程序中是否出现了明显非法的数据，如果出现了终止程序以免导致严重后果，同时也便于查找错误。不过</span><span>ASSERT()</span><span>只在</span><span>Debug</span><span>版本中有效。</span></p>
<p><span style="COLOR: red">2、代码参考<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;唉，由于是初学者，对C++还未学透，我想不到办法测试，ASSERT()，当括号里面的表达式错误的时候所发生的情况。如有知晓者，望评论，指点一二，thanks了~！<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下面是我的代码，建立的依然是Win32 Console Application工程，选择第三个。</span></p>
&nbsp;
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">stdafx.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">assert.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></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;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这个字符串赋值函数是Linus&nbsp;Torvalds写</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;cpy(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;dest,</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;source)<br><img id=Codehighlighter1_166_516_Open_Image onclick="this.style.display='none'; Codehighlighter1_166_516_Open_Text.style.display='none'; Codehighlighter1_166_516_Closed_Image.style.display='inline'; Codehighlighter1_166_516_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_166_516_Closed_Image onclick="this.style.display='none'; Codehighlighter1_166_516_Closed_Text.style.display='none'; Codehighlighter1_166_516_Open_Image.style.display='inline'; Codehighlighter1_166_516_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_166_516_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_166_516_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用ASSERT宏断言dest和source非空，可以输出调试信息，在release版本里自动失效，比调试时无故死掉强<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">source和dest与NULL显式比较，强调他们是指针变量</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;assert((NULL</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">source)</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">(NULL</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">dest));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;returnstring</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dest;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">*dest++=*source++，是字符串赋值语句，<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&amp;：取地址运算符；*：指针运算符（或称&#8220;间接访问&#8221;运算符），取其指向的内容。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">dest和source都是地址，++，就是下一个地址了，然后用*，取出这个地址的内容</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">((</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">dest</span><span style="COLOR: #000000">++=*</span><span style="COLOR: #000000">source</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">\0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_485_492_Open_Image onclick="this.style.display='none'; Codehighlighter1_485_492_Open_Text.style.display='none'; Codehighlighter1_485_492_Closed_Image.style.display='inline'; Codehighlighter1_485_492_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_485_492_Closed_Image onclick="this.style.display='none'; Codehighlighter1_485_492_Closed_Text.style.display='none'; Codehighlighter1_485_492_Open_Image.style.display='inline'; Codehighlighter1_485_492_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_485_492_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_485_492_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;returnstring;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br><img id=Codehighlighter1_551_858_Open_Image onclick="this.style.display='none'; Codehighlighter1_551_858_Open_Text.style.display='none'; Codehighlighter1_551_858_Closed_Image.style.display='inline'; Codehighlighter1_551_858_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_551_858_Closed_Image onclick="this.style.display='none'; Codehighlighter1_551_858_Closed_Text.style.display='none'; Codehighlighter1_551_858_Open_Image.style.display='inline'; Codehighlighter1_551_858_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_551_858_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_551_858_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_565_581_Open_Image onclick="this.style.display='none'; Codehighlighter1_565_581_Open_Text.style.display='none'; Codehighlighter1_565_581_Closed_Image.style.display='inline'; Codehighlighter1_565_581_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_565_581_Closed_Image onclick="this.style.display='none'; Codehighlighter1_565_581_Closed_Text.style.display='none'; Codehighlighter1_565_581_Open_Image.style.display='inline'; Codehighlighter1_565_581_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;src[]</span><span style="COLOR: #000000">=</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_565_581_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_565_581_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_597_613_Open_Image onclick="this.style.display='none'; Codehighlighter1_597_613_Open_Text.style.display='none'; Codehighlighter1_597_613_Closed_Image.style.display='inline'; Codehighlighter1_597_613_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_597_613_Closed_Image onclick="this.style.display='none'; Codehighlighter1_597_613_Closed_Text.style.display='none'; Codehighlighter1_597_613_Open_Image.style.display='inline'; Codehighlighter1_597_613_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;last[]</span><span style="COLOR: #000000">=</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_597_613_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_597_613_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">before&nbsp;using&nbsp;function:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_682_726_Open_Image onclick="this.style.display='none'; Codehighlighter1_682_726_Open_Text.style.display='none'; Codehighlighter1_682_726_Closed_Image.style.display='inline'; Codehighlighter1_682_726_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_682_726_Closed_Image onclick="this.style.display='none'; Codehighlighter1_682_726_Closed_Text.style.display='none'; Codehighlighter1_682_726_Open_Image.style.display='inline'; Codehighlighter1_682_726_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_682_726_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_682_726_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">last[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">]=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">last[i]</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cpy(last,src);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">after&nbsp;using&nbsp;function:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_801_845_Open_Image onclick="this.style.display='none'; Codehighlighter1_801_845_Open_Text.style.display='none'; Codehighlighter1_801_845_Closed_Image.style.display='inline'; Codehighlighter1_801_845_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_801_845_Closed_Image onclick="this.style.display='none'; Codehighlighter1_801_845_Closed_Text.style.display='none'; Codehighlighter1_801_845_Open_Image.style.display='inline'; Codehighlighter1_801_845_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_801_845_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_801_845_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">last[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">]=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">last[i]</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<img src ="http://www.cppblog.com/kangnixi/aggbug/106755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-01-29 19:53 <a href="http://www.cppblog.com/kangnixi/archive/2010/01/29/106755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Call Stack技巧（调用堆栈调试）</title><link>http://www.cppblog.com/kangnixi/archive/2010/01/28/106642.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Thu, 28 Jan 2010 08:07:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/01/28/106642.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/106642.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/01/28/106642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/106642.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/106642.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、堆栈调试的原理</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;调用堆栈反映了当前断点处函数是被哪些函数按照什么顺序调用的？</span></p>
<p><span style="COLOR: red">2、堆栈调试的技巧</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;单击&#8220;</span><span>Debug</span><span>&#8221;工具条上的【</span><span>Call Stack</span><span>】就显示&#8220;</span><span>Call Stack</span><span>&#8221;对话框。在&#8220;</span><span>Call Stack</span><span>&#8221;对话框中显示了一个调用系列，最上面的是当前函数，往下依次是调用函数的上级函数，单击这些函数名可以跳到对应的函数中。</span></p>
<br><br><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">如果还想获得更多关于《</span><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang=EN-US>Visual C++</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">代码参考与技巧大全》的内容，可点击下面网址，<a href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html">http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html</a></span>
<img src ="http://www.cppblog.com/kangnixi/aggbug/106642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-01-28 16:07 <a href="http://www.cppblog.com/kangnixi/archive/2010/01/28/106642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>值调试技巧</title><link>http://www.cppblog.com/kangnixi/archive/2010/01/28/106640.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Thu, 28 Jan 2010 08:02:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/01/28/106640.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/106640.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/01/28/106640.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/106640.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/106640.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、值调试的概述</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;观察变量的值，可以在断点状态下将鼠标放在该变量的上面，等一下就会显出变量的值。其实，</span><span>VC</span><span>还提供被称为</span><span>Watch</span><span>或</span><span>Memory</span><span>的机制来观看变量和表达式的值。下面对这两种调试方法逐一介绍。</span></p>
<p><span style="COLOR: red">2、调试技巧</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;①</span><span>Watch</span><span>机制</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VC</span><span>提供一种被称为</span><span>Watch</span><span>的机制来观看变量和表达式的值。在断点状态下，在变量上单击鼠标右键，在弹出的快捷菜单中选择【</span><span>Quick Watch</span><span>】命令，就弹出一个对话框，显示这个变量的值。单击&#8220;</span><span>Debug</span><span>&#8221;工具条上的【</span><span>Watch</span><span>】按钮，就出现一个</span><span>Watch</span><span>视图（</span><span>Watch1</span><span>，</span><span>Watch2</span><span>），在该视图中输入变量或者表达式，就可以观察变量或者表达式的值。注意：这个表达式不能有副作用，例如</span><span>++</span><span>运算符绝对禁止用于这个表达式中，因为这个运算符将修改变量的值，导致软件的逻辑被破坏</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;②</span><span>Memory</span><span>机制</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由于指针指向的数组，</span><span>Watch</span><span>只能显示第一个元素的值。为了显示数组的后续内容，或者要显示一片内存的内容，可以使用</span><span>Memory</span><span>功能。在</span><span>Debug</span><span>工具条上单击【</span><span>Memory</span><span>】按钮，弹出一个对话框，在其中输入地址，就可以显示该地址指向的内存的内容。</span></p>
<br><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">如果还想获得更多关于《</span><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang=EN-US>Visual C++</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">代码参考与技巧大全》的内容，可点击下面网址，<a href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html">http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html</a></span>
<img src ="http://www.cppblog.com/kangnixi/aggbug/106640.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-01-28 16:02 <a href="http://www.cppblog.com/kangnixi/archive/2010/01/28/106640.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>断点调试</title><link>http://www.cppblog.com/kangnixi/archive/2010/01/28/106636.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Thu, 28 Jan 2010 07:39:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/01/28/106636.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/106636.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/01/28/106636.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/106636.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/106636.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、断点</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;断点是一个信号，它通知调试器，在某个特定点上暂时将程序执行挂起。当在某个断点处挂起时，我们称程序处于中断模式，进入中断模式并不会终止或结束程序的执行，执行可以在任何时候继续。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;断点模式可以看做一种超时。所有元素（例如，函数、变量和对象）都保留在内存中，但他们的移动和活动被挂起了。在中断模式下，可以检查它们的位置和状态，以查看是否存在冲突或bug。你可以在中断模式下对程序进行调整。例如，可以更改变量的值。可以移动执行点，这会改变执行回复后将要执行的下一条语句。</p>
<p><span style="COLOR: red">2、断点调试</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;断点是调试器设置的一个代码位置。当程序运行到断点时，程序中断执行，回到调试器。断点是最常用的技巧，调试时，只有设置了断点并使程序回到调试器，才能对程序进行在线调试。设置断点：【F9】，再按【F9】，去掉断点</p>
<br><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">如果还想获得更多关于《</span><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang=EN-US>Visual C++</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">代码参考与技巧大全》的内容，可点击下面网址，<a href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html">http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html</a></span>
<img src ="http://www.cppblog.com/kangnixi/aggbug/106636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-01-28 15:39 <a href="http://www.cppblog.com/kangnixi/archive/2010/01/28/106636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Release版本的调试技巧</title><link>http://www.cppblog.com/kangnixi/archive/2010/01/28/106635.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Thu, 28 Jan 2010 07:29:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/01/28/106635.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/106635.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/01/28/106635.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/106635.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/106635.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、问题阐述</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在编译程序时，</span><span>Debug</span><span>版本是可以调试的，程序员能够获得程序的运行状态。</span><span>Release</span><span>版本可以进行调试吗？</span></p>
<p><span style="COLOR: red">2、实现技巧</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在&#8220;</span><span>Release</span><span>&#8221;版的&#8220;</span><span>Project Settings</span><span>&#8221;里，把</span><span>C/C++</span><span>设置的&#8220;</span><span>Debug info</span><span>&#8221;设为&#8220;</span><span>Program Database</span><span>&#8221;，如图所示</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在&#8220;</span><span>Link</span><span>&#8221;选项卡中选择&#8220;</span><span>Generate debug info</span><span>&#8221;，这样就可以看着源码来调试</span><span>Release</span><span>版，而不用看着反汇编代码来调试那么辛苦了。由于</span><span>Release</span><span>版本一般是优化过的，所以有时你检查变量数值时所显示的数值不一定就是该变量当前的数值，但是程序执行顺序是不变的，如果真的要看其准确的数值的话，用反汇编来看，也许是在某个</span><span>register</span><span>里。调试完毕之后，把&#8220;</span><span>Link</span><span>&#8221;设置的&#8220;</span><span>Generate browse info</span><span>&#8221;去掉，重新连接一下就行。</span></p>
<br><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">如果还想获得更多关于《</span><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang=EN-US>Visual C++</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">代码参考与技巧大全》的内容，可点击下面网址，<a href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html">http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html</a></span>
<img src ="http://www.cppblog.com/kangnixi/aggbug/106635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-01-28 15:29 <a href="http://www.cppblog.com/kangnixi/archive/2010/01/28/106635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Debug版本和Release版本的区别</title><link>http://www.cppblog.com/kangnixi/archive/2010/01/28/106633.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Thu, 28 Jan 2010 07:20:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/01/28/106633.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/106633.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/01/28/106633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/106633.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/106633.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="COLOR: red">1、问题阐述</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在</span><span>VC</span><span>工程比较大时，开发的软件通常会出现在</span><span>Debug</span><span>状态下能够正常运行，而在</span><span>Release</span><span>状态下无法正常运行的情况。这种错误的检查的前提是要弄清二者之间本质的区别。</span></p>
<p><span style="COLOR: red">2、Debug和Release的区别</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;①</span><span>Debug</span><span>版本包含了大量的调试信息，所以形成的可执行文件要比</span><span>Release</span><span>版本大。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;②二者根据选择的编译选项不同，需要的支持库也不同，如果是</span><span>MFC</span><span>的工程，则需要</span><span>MFC42D.dll</span><span>等库支持，而</span><span>Release</span><span>版本则需要</span><span>MFC42.dll</span><span>的支持。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;③</span><span>Release Build</span><span>不对源代码进行调试，不考虑</span><span>MFC</span><span>的诊断宏，使用的是</span><span>MFC Release</span><span>库，编译是对应用程序的速度进行优化，而</span><span>Debug Build</span><span>则正好相反，它允许对源代码进行调试，可以定义和使用</span><span>MFC</span><span>的诊断宏，采用</span><span>MFC Debug</span><span>库，对速度没有优化。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以上从现象上介绍了</span><span>Debug</span><span>版本和</span><span>Release</span><span>版本之间的区别，它们的本质区别在于一组编译的开关量的设置，编译时开关量如表</span><span>2-2</span><span>和表</span><span>2-3</span><span>所示</span></p>
<p align=center><span>表</span><span>2-2 Debug</span><span>版本编译选项表</span></p>
<div align=center>
<table border=1 cellSpacing=0 cellPadding=0 align=center>
    <tbody>
        <tr>
            <td vAlign=top width=91>
            <p><span>编译选项</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>设置</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><span>/MDd</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>与</span><span>MSVCRTD.lib</span><span>调试库链接</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><span>/MLd</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>与</span><span>LIBCD.lib</span><span>调试库链接</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><span>/MTd</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>与</span><span>LIBCMTD.lib</span><span>调试库链接</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><span>/Od</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>关闭优化开关</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><span>/D</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>打开编译器调试开关</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><span>/ZI</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>创建</span><span>Edit and continue</span><span>（编辑继续）数据库，这样在调试过程中如果改了源代码不需要重新编译</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><span>/GZ</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>可以帮助捕获内存错误</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><span>/Gm</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>打开最小化重链接开关，减少链接时</span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=center>&nbsp;</p>
<p align=center><span>表</span><span>2-3 Release</span><span>版本的编译选项表</span></p>
<div align=center>
<table border=1 cellSpacing=0 cellPadding=0 align=center>
    <tbody>
        <tr>
            <td vAlign=top width=91>
            <p><span>编译选项</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>设置</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><span>/MD</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>与</span><span>MSVCRT.lib</span><span>链接</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><span>/ML</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>与</span><span>LIBC.lib</span><span>链接</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><span>/MT</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>与</span><span>LIBCMT.lib</span><span>链接</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><span>/o1</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>最小化空间</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><span>/o2</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>最快速度</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><span>/D</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>设置为</span><span>NDEBUG</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><span>/GF</span></p>
            </td>
            <td vAlign=top width=477>
            <p><span>启用字符串池</span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p>&nbsp;</p>
<span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">如果还想获得更多关于《</span><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang=EN-US>Visual C++</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">代码参考与技巧大全》的内容，可点击下面网址，<a href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html">http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html</a></span> 
<img src ="http://www.cppblog.com/kangnixi/aggbug/106633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-01-28 15:20 <a href="http://www.cppblog.com/kangnixi/archive/2010/01/28/106633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>生成与现有项目除了项目名外完全相同的新项目</title><link>http://www.cppblog.com/kangnixi/archive/2010/01/28/106631.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Thu, 28 Jan 2010 07:01:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/01/28/106631.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/106631.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/01/28/106631.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/106631.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/106631.html</trackback:ping><description><![CDATA[<br><span style="COLOR: red">该项目未进行试验，暂无图</span><br>&nbsp;
<p><span style="COLOR: red">1、&nbsp;问题阐述</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;项目工程已经建立，如果想改变当初为项目工程创建的项目名称，可以利用</span><span>custom</span><span>向导，重新建立一个除项目名称外与现有项目完全相同的新项目</span></p>
<p><span style="COLOR: red">2、&nbsp;技巧阐述</span></p>
<p><span>(1)利用【File】菜单下生成新项目中的&#8220;Custom Appwizard&#8221;，输入想要创建的想到的名称&#8220;Ctrl&#8221;，如下图所示</span></p>
<p><span>(2)单击【OK】按钮，进入下一步设置，选择&#8220;An existing project&#8221;，如下图所示</span></p>
<p><span>(3)单击【Next】按钮，然后选择现有项目的项目文件名，如下图所示</span></p>
<p><span>(4)单击【Finish】按钮，生成向导，显示生成向导的信息，如下图所示</span></p>
<p><span>(5)编译向导，就生成了一个与现有项目相同但可以重新取名的项目的Appwizard，如下图所示<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以同使用mfc appwizard一样用它。可以在vc安装目录的common\msdev98\template目录中删除该wizard中的.awx和.pdb文件，并删除该向导。<br><br><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">如果还想获得更多关于《</span><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang=EN-US>Visual C++</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">代码参考与技巧大全》的内容，可点击下面网址，<a href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html">http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html</a></span></span></p>
<img src ="http://www.cppblog.com/kangnixi/aggbug/106631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-01-28 15:01 <a href="http://www.cppblog.com/kangnixi/archive/2010/01/28/106631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>发布程序设置</title><link>http://www.cppblog.com/kangnixi/archive/2010/01/28/106626.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Thu, 28 Jan 2010 06:54:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/01/28/106626.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/106626.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/01/28/106626.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/106626.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/106626.html</trackback:ping><description><![CDATA[&nbsp; <br>
<p><span style="COLOR: red">该技巧未进行试验，所暂无图</span><span style="COLOR: red"><br><br>1、&nbsp;问题阐述</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;产品在发布之前要进行发布设置，确定产品的版权、语言、版本及产品描述等。如何对版本进行修改呢？</span></p>
<p><span style="COLOR: red">2、&nbsp;实现技巧</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;进入资源视图，双击&#8220;</span><span>VS_VERSION_INFO</span><span>&#8221;展开此资源，再在右边的正文窗口中双击修改版本号，选择菜单【</span><span>Bulid</span><span>】—</span><span>&gt;</span><span>【</span><span>Rebuild All</span><span>】命令，</span><span>exe</span><span>就变成了新版本号了。<br><br><br><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">如果还想获得更多关于《</span><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang=EN-US>Visual C++</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">代码参考与技巧大全》的内容，可点击下面网址，<a href="http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html">http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html</a></span></span></p>
<img src ="http://www.cppblog.com/kangnixi/aggbug/106626.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-01-28 14:54 <a href="http://www.cppblog.com/kangnixi/archive/2010/01/28/106626.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>