构造函数中,类的成员函数中出现了异常,析构函数能否正常调用

在C++中,如果构造函数中出现异常,析构函数不会被调用,可能导致内存泄露。非局部静态变量由编译器自动管理,而堆对象需程序员手动释放。为避免内存泄露,可以使用智能指针。当类的成员函数抛出异常时,析构函数仍会被调用。示例代码展示了这一现象。
摘要由CSDN通过智能技术生成

此处引用了某个人的帖子的回复,我觉得回答得不错,引用一下:

**在c++中,内存分为heap(堆区)--放置由new动态分配的内存,stack(栈区)--放置临时(局部)变量,和静态存储区--放置静态和全局变量;
**非局部静态变量,在main()函数前由编译器分配内存并初始化(构造),在main()结束后由编译器将其占用的内存释放(析构),所以这部分内存只要程序不结束就不会释放;
**局部变量在程序执行过程中由编译器自动产生和销毁;
**heap对象由new分配内存,必须由程序员通过delete释放掉内存;
内存泄露一般都是发生在堆对象身上;
你举的例子:
class   B:public   A
{
    public:
      B(int   i):A(i)
      {
      }
}
构造函数并没有动态分配内存,所以不管对对象的构造能不能成功,你都不必担心内存泄露,编译器帮你做了所以的工作   :)    
**若在构造函数中有动态内存的分配,通过new,你也应该在析构函数中用delete将内存释放;但若在构造函数中发生了异常(在new语句后),如果没有异常处理函数,构造函数将退出,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值