荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Second (石开), 信区: Program
标  题: C++语言常见问题解答(2-10)除错与错误处理
发信站: 荔园晨风BBS站 (Sun Sep 23 10:46:21 2001), 转信

===============================
■□ 第10节:除错与错误处理
===============================

Q43:怎样处理建构子的错误?

丢出一个例外(throw an exception)。

建构子没有传回值,所以不可能采用它传回的错误码。因此,侦测建构子错误最好的
方法,就是丢出一个例外。

在 C++ 编译器尚未提供例外处理之前,我们可先把物件置於「半熟」的状态(譬如
:设个内部的状态位元),用个查询子("inspector")来检查该位元,就可让用户
查看该物件是否还活著。也可以用另一个成员函数来检查该位元,若该物件没存活
下来,就做个「没动作」(或是更狠的像是 "abort()" )的程式。但这实在很丑陋。

========================================

Q44:如果建构子会丢出例外的话,该怎麽处理它的资源?

物件里面的每个资料成员,都该自己收拾残局。

如果建构子丢出一个例外的话,该物件的解构子就“不会”执行。如果你的物件得回
复些曾做过的事情(像是配置记忆体、开启档案、锁定 semaphore),该物件内的资
料成员就“必须”记住这个「必须恢复的东西」。

举例来说:不要单单的把配置到的记忆体放入 "Fred*" 资料成员,而要放入一个「
聪明的指标」(smart pointer) 资料成员中;当该“聪明指标”死掉的话,它的解构
子就会删去 Fred 物件。

【译注】「聪明的指标」(smart pointer) 在 Q4 中有提到一点。

--
                            既然热爱生命
                            那么,
                            一切都在意料之中。

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.52.239]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店