为了账号安全,请及时绑定邮箱和手机立即绑定

c++,当构造函数失败时,构造函数内部怎么处理?

c++,当构造函数失败时,构造函数内部怎么处理?

MMMHUHU 2019-02-13 20:11:54
c++,当构造函数失败时,构造函数内部怎么处理?
查看完整描述

2 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

你没有明确什么叫“构造函数失败”。我的理解是:构造函数中某一个执行过程没有得到你期望的结果。
如果我的理解是你想表达的,那么构造函数内部的处理是这样:
1. 构造函数想通知外部自己构造失败,只有抛异常这一个途径(没有返回值);
2. 如果你不抛异常,那么构造函数执行完毕,从语言层面上编译器认为该对象是正确构造了的,只有你知道其实构造没有按预想的进行,所以你需要用状态变量、构造函数引用参数或什么其他玩意儿让外界可以知道构造失败了。
3. 如果你抛异常标识构造失败,那么,所有已经构造好的基类对象和数据成员会按照构造逆序逐个进行析构(基础数据类型除外,因为它们析构就是什么都不做)。这里有一点要注意,如果发生了动态内存分配,那需要在抛异常前手动释放内存,否则会有内存泄漏。

查看完整回答
反对 回复 2019-03-26
?
BIG阳

TA贡献1859条经验 获得超6个赞

  1、构造函数想通知外部自己构造失败,只有抛异常这一个途径(没有返回值);
  2、 如果不抛异常,那么构造函数执行完毕,从语言层面上编译器认为该对象是正确构造了的,其实构造没有按预想的进行,所以需要用状态变量、构造函数引用参数就可以让外界可以知道构造失败了。
  3.、如果抛异常标识构造失败,那么,所有已经构造好的基类对象和数据成员会按照构造逆序逐个进行析构(基础数据类型除外,因为它们析构就是什么都不做)。这里有一点要注意,如果发生了动态内存分配,那需要在抛异常前手动释放内存,否则会有内存泄漏。
  构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。



查看完整回答
反对 回复 2019-03-26
  • 2 回答
  • 0 关注
  • 1122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信