C++中构造函数是没有返回值的,那么该如何处理构造函数中可能的错误(例如资源分配失败,等错误)

wuyuwww 2011-10-24 07:48:03
如题
...全文
670 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
星羽 2011-10-25
  • 打赏
  • 举报
回复
一定要在构造里 初始化资源就 throw吧

不如就别在构造里做会失败的事情
家个 init 函数,构造完后在init
pathuang68 2011-10-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wuyuwww 的回复:]

如果我想楼上的那样回答,人家会给我0分的
[/Quote]

10楼的回答是非常正确的。当然2楼说的assert和throw也很正确。

和构造函数对应的析构函数,如果楼主看过C++ Primer的第四版将自定义异常的时候,就可以返现Stanley Lippman也说过类似的话,而且在析构函数中不能throw,这时候前面说到的throw之类的办法也不可以了。Herb Sutter在Exceptional c++ 中也说过说:“永远都不要写能够抛出异常的析构函数”
wuyuwww 2011-10-24
  • 打赏
  • 举报
回复
啊哈哈
taodm 2011-10-24
  • 打赏
  • 举报
回复
因为这是C++之父和herb sutter这样的最顶级专家的回答。
你自己掂量吧。
wuyuwww 2011-10-24
  • 打赏
  • 举报
回复
如果我想楼上的那样回答,人家会给我0分的
taodm 2011-10-24
  • 打赏
  • 举报
回复
那就不要把可能出错的这些操作放在构造函数里。
wind_breez 2011-10-24
  • 打赏
  • 举报
回复
try catch
wuyuwww 2011-10-24
  • 打赏
  • 举报
回复
怎么抛啊?哈哈 我不会?
gw_net 2011-10-24
  • 打赏
  • 举报
回复
use smart pointer inside class
cyf31 2011-10-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hnuqinhuan 的回复:]
异常或者assert断言
[/Quote]
同解
zzcmx2008 2011-10-24
  • 打赏
  • 举报
回复
检查异常情况
caddor2011 2011-10-24
  • 打赏
  • 举报
回复
throw 抛出异常 检测



cocoabird 2011-10-24
  • 打赏
  • 举报
回复
用资源管理器管理,从新写个class管理这个构造函数的对象
無_1024 2011-10-24
  • 打赏
  • 举报
回复
异常或者assert断言
qq120848369 2011-10-24
  • 打赏
  • 举报
回复
抛出异常。

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧