动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ C/C++教程 ]的信息

本月文章推荐
.VC++编程隐藏计算机中的鼠标.
.霍夫曼树编码的实现.
.新手入门:C/C++中的结构体.
.C语言库函数 (C类字母).
.Snake.Net中的线性表.
.获取GetLastError返回信息.
.C++消息连接的一种系统方法.
.C语言初学者入门讲座 第六讲 分支.
.C语言中的三大定律.
.ActiveX技术综述(二) .
.gcc_egcs使用.
.十全十美游戏.
.POSIX 线程详解(1).
.C++箴言:避免返回对象内部构件的.
.C语言函数中利用指针引用可变参数.
.穷举算法解题的一般思路.
.在BCB中使用VCL控件数组2.
.就c++中的const限定修饰符做一个.
.VC下显示JPEG、GIF图像的简便方法.
.C++中的虚函数(1).

C++语言常见问题解答(2)

发表日期:2008-3-8 |



== Part 2/4  ============================  ============================= 
■□ 第9节:自由记忆体治理 
============================= 
 
Q33:"delete p" 会删去 "p" 指标,还是它指到的资料,"*p" ? 
 
该指标指到的资料。 
 
"delete" 真正的意思是:「删去指标所指到的东西」(delete the thing pointed 
to by)。同样的英文误用也发生在 C 语言的「『释放』指标所指向的记忆体」上 
("free(p)" 真正的意思是:"free_the_stuff_pointed_to_by(p)" )。 
 
======================================== 
 
Q34:我能 "free()" 掉由 "new" 配置到的、"delete" 掉由 "malloc()" 配置到的 
      记忆体吗? 
 
不行。 
 
在同一个程式里,使用 malloc/free 及 new/delete 是完全合法、合理、安全的; 
但 free 掉由 new 配置到的,或 delete 掉由 malloc 配置到的指标则是不合法、 
不合理、该被痛骂一顿的。 
 
======================================== 
 
Q35:为什麽该用 "new" 而不是老字号的 malloc() ? 
 
建构子/解构子、型别安全性、可被覆盖(overridability)。 
 
建构子/解构子:和 "malloc(sizeof(Fred))" 不同,"new Fred()" 还会去呼叫 
Fred 的建构子。同理,"delete p" 会去呼叫 "*p" 的解构子。 
 
型别安全性:malloc() 会传回一个不具型别安全的 "void*",而 "new Fred()" 则 
会传回正确型态的指标(一个 "Fred*")。 
 
可被覆盖:"new" 是个可被物件类别覆盖的运算子,而 "malloc" 不是以「各个类别 
」作为覆盖的基准。 
 
======================================== 
 
Q36:为什麽 C++ 不替 "new" 及 "delete" 搭配个 "realloc()" ? 
 
避免你产生意外。 
 
当 realloc() 要拷贝配置区时,它做的是「逐位元 bitwise」的拷贝,这会弄坏大 

部份的 C++ 物件。不过 C++ 的物件应该要能自我拷贝才对:用它们自己的拷贝建构 
子或设定运算子。 
 
======================================== 
 
Q37:我该怎样配置/释放阵列? 
 
用 new[] 和 delete[] : 
 
         Fred* p = new Fred[100]; 
         //... 
         delete [] p; 
 
每当你在 "new" 运算式中用了 "[...]",你就必须在 "delete" 陈述中使用 "[]"。 
                                          ^^^^ 
这语法是必要的,因为「指向单一元素的指标」与「指向一个阵列的指标」在语法上 
并无法区分开来。 
 
======================================== 
 
Q38:万一我忘了将 "[]" 用在 "delete" 由 "new Fred[n]" 配置到的阵列,会发生 
      什麽事? 
 
灾难。 
 
这是程式者的--而不是编译器的--责任,去确保 new[] 与 delete[] 的正确配 
对。若你弄错了,编译器不会产生任何编译期或执行期的错误讯息。堆积(heap)被 
破坏是最可能的结局,或是更糟的,你的程式会当掉。 
 
======================================== 
 
Q39:成员函数做 "delete this" 的动作是合法的(并且是好的)吗? 
 
只要你小心的话就没事。 
 
我所谓的「小心」是: 
 
   1) 你得 100% 确定 "this" 是由 "new" 配置来的(而非 "new[]",亦非自订的 
      "new" 版本,一定要是最原始的 "new")。 
 
   2) 你得 100% 确定该成员函数是此物件最後一个会呼叫到的。 
 
   3) 做完自杀的动作 ("delete this;") 後,你不能再去碰 "this" 的物件了,包 
      括资料及运作行为在内。 
 
   4) 做完自杀的动作 ("delete this;") 後,你不能再去碰 "this" 指标了。 
      换句话说,你不能查看它、将它与其他指标或是 NULL 相比较、印出其值、 
      对它转型、对它做任何事情。 
 
很自然的,这项警告也适用於:当 "this" 是个指向基底类别的指标,而解构子不是 

virtual 的场合。 
 
======================================== 
 
Q40:我该怎麽用 new 来配置多维阵列? 
 
有很多方法,端视你对阵列大小的伸缩性之要求而定。极端一点的情形,假如你在编 
译期就知道所有阵列的维度,你可以静态地配置(就像 C 一样): 
 
         class Fred { /*...*/ }; 
 
         void manipulateArray() 
         { 
           Fred matrix[10][20]; 
 
           //使用 matrix[i][j]...
上一篇:C++语言常见问题解答(3) 人气:271
下一篇:C++语言常见问题解答(1)B 人气:330
浏览全部C/C++的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-8-20 25175 学生成绩管理查询系统 v2.
2008-8-20 乘风电影程序 v3.7 Acc
2008-8-20 乘风电影程序 v3.7 Sql
2008-8-20 EasyJForum v2.2
2008-8-20 XML文章系统 v1.08 build 080820
2008-8-20 老Y文章管理系统 v2.0 build 080
2008-8-20 OA企业智能办公自动化系统边缘特
2008-8-20 欣颐免费时尚发廊美发厅全站程序
2008-8-20 凌风简单留言板 v1.0
2008-8-16 iLaba Player(小喇叭播放器) v2.
2008-8-16 DoubleClickFix 鼠标双击修正工具
2008-8-16 CrystalCPUID 4.15.2.451
2008-8-16 VeryCD 电驴(easyMule) 1.0.4 Bu
2008-8-16 uTorrent 1.8 Build 11813 - Sta
2008-8-16 比特精灵(BitSpirit) v3.3.2.287
2008-8-16 StayInTune音叉 v1.0 破解版
2008-8-16 iChing《周易》汉化补丁 v1.0
2008-8-16 Starmap星空图v1.0汉化破解版
  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵