社区
C++ 语言
帖子详情
一道面试题:C++构造函数无返回值,如何判断对象是否“构造”成功?
浪浪不会AI
2009-05-07 09:04:00
一道面试题,答案可能不惟一:
C++构造函数无返回值,如何判断对象是否“构造”成功?
注意:这里的“构造”不是单指分配对象本身的内存,而是指在建立对象时做的初始化操作(如打开文件、连接数据库等)
...全文
2283
36
打赏
收藏
一道面试题:C++构造函数无返回值,如何判断对象是否“构造”成功?
一道面试题,答案可能不惟一: C++构造函数无返回值,如何判断对象是否“构造”成功? 注意:这里的“构造”不是单指分配对象本身的内存,而是指在建立对象时做的初始化操作(如打开文件、连接数据库等)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
36 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kuangye1988
2009-11-21
打赏
举报
回复
参考symbian c++的设计规范吧~!两阶段构造!
lylm
2009-05-16
打赏
举报
回复
赞同29楼,
我们原来的项目中,很多构造函数都是空的,
这部分功能完全可以用initial和SetXXX等函数代替,这样就可以处理出错的情况
cnStreamlet
2009-05-16
打赏
举报
回复
二次构造?
C#/java 中抛异常似乎是出错处理的标准做法,而在 C++ 中却是应该尽量避免的
papaofdoudou
2009-05-16
打赏
举报
回复
mark
珍惜生命远离CPP
2009-05-16
打赏
举报
回复
[Quote=引用 26 楼 yshuise 的回复:]
书上是指出最好不在构造函数抛出异常。
构造其他对象,完全可以用其他函数代替实现。
[/Quote]
啥书
hjjdebug
2009-05-07
打赏
举报
回复
[Quote=引用 13 楼 akirya 的回复:]
额外参数不行,有异常就不能正常工作了。
[/Quote]
额外参数可以判断对象构造成功,也可以判断构造不成功,例如文件没有打开,内存没有分配成功等。
但对系统抛出的异常不能处理。例如除0,不过通常也可以满足要求了。看具体使用环境吧。
bitxinhai
2009-05-07
打赏
举报
回复
构造函数中抛出异常时概括性总结
(1) C++中通知对象构造失败的唯一方法那就是在构造函数中抛出异常;
(2) 构造函数中抛出异常将导致对象的析构函数不被执行;
(3) 当对象发生部分构造时,已经构造完毕的子对象将会逆序地被析构;
猫已经找不回了
2009-05-07
打赏
举报
回复
Exceptional C+++Style中文版
CSDN有免费下载,赶紧的,楼主。
yshuise
2009-05-07
打赏
举报
回复
[Quote=引用 13 楼 akirya 的回复:]
额外参数不行,有异常就不能正常工作了。
[/Quote]
我就是这个意思。因为楼主明显构造是复杂对象,在构造其他对象的时候,可以抛出异常的。
珍惜生命远离CPP
2009-05-07
打赏
举报
回复
额外参数不行,有异常就不能正常工作了。
hjjdebug
2009-05-07
打赏
举报
回复
认为至少有两种方法可行
1: 在类的构造函数中抛出异常,在类对象创建时捕获异常
2: 在类的构造中添加类初始化成功与否的参数,在对象创建时检查这个返回结果。
这样的缺点是需要额外传递一个参数。
漁_夫
2009-05-07
打赏
举报
回复
[Quote=引用 10 楼 taodm 的回复:]
哎,找本《exceptional C++》开始认真研究吧。
[/Quote]
同感,楼主问的这些问题,实际开发中常常遇到,但是很少有人总结,我以前就是乱凑代码。现在慢慢改正
taodm
2009-05-07
打赏
举报
回复
哎,找本《exceptional C++》开始认真研究吧。
yshuise
2009-05-07
打赏
举报
回复
因为在抛出异常那个地方,程序就在哪儿停止,bool或是函数根本不会执行的意思。
yshuise
2009-05-07
打赏
举报
回复
用bool变量,理论是是不可行,有漏洞的。
假如在一个构造函数里面构造多个对象,当构造一个成功的时候,
另外一个失败,在这个失败的对象里面跑出异常,此刻前面那个对象因没有释放,而
内存泄漏,bool可能根本就走不到哪儿去。
捕鲸叉
2009-05-07
打赏
举报
回复
如果不抛出异常,就表示成功吧
beyond071
2009-05-07
打赏
举报
回复
学习了
saturn254
2009-05-07
打赏
举报
回复
对于封装好的类来说,最好还是不用异常处理吧??
对于类的调用者来说 不清楚类中的具体实现,也不会在实例化类时(构造),进行异常处理
saturn254
2009-05-07
打赏
举报
回复
添加表示初始化成功与否的成员函数,当程序自动调用构造函数时,调用该成员函数判断“构造”是否成功
如
class Test
{
public:
Test()
{
}
bool fail()
{
if(condition)//失败
return ture;
else
return false;
//other code
....
}
LKStudio
2009-05-07
打赏
举报
回复
当然用异常抛出是最好的
加载更多回复(16)
C++
面试题
,公司面试必备
C++
面试题
,希望对大家有帮助,公司面试必备
C++
_
面试题
(服务器编程、网络编程)
C++
_
面试题
(服务器编程、网络编程),很全,很实用!
C/
C++
面试题
大全
C/
C++
面试题
大全 1. 面向
对象
的程序设计思想是什么? 答:把数据结构和对数据结构进行操作的方法封装形成一个个的
对象
。 2. 什么是类? 答:把一些具有共性的
对象
归类后形成一个集合,也就是所谓的类。 3.
对象
都具有的二方面特征是什么?分别是什么含义? 答:
对象
都具有的特征是:静态特征和动态特征。 静态特征是指能描述
对象
的一些属性,动态特征是指
对象
表现出来的行为 .....
C++
开发工程师常用
面试题
C++
开发工程师常用
面试题
,想面试、笔试
C++
工程师的可以事先预习一下。
C/
C++
经典
面试题
C++
经典
面试题
C经典
面试题
C/
C++
经典
面试题
很好的东西,绝对不会让你失望。 看完之后,你的C/
C++
面试跟笔试绝对没有问题
C++ 语言
65,168
社区成员
250,528
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章