C++外传3、动态内存申请的结果

1、问题:动态内存申请一定成功吗?

  • 常见的动态内存分配代码
    在这里插入图片描述
  • 必须知道的事实
    在这里插入图片描述

2、问题: new 语句中的异常是怎么抛出来的?

  • new 关键字在 C++规范中的标准行为
    在这里插入图片描述
  • new 关键字在C++规范中的标准行为
    在这里插入图片描述

3、new_handler() 的定义和使用
在这里插入图片描述
问题:如何跨编译器 统一 new 的行为,提高代码移植性?

解决方案:
在这里插入图片描述

int* p = new(nothrow) int[10];
  • 实验结论
    不是所有的编译器都遵循C++的标准规范
    — 编译器可能重定义 new 的实现,并在实现中抛出 bad_alloc 异常
    编译器的默认实现中,可能没有设置全局的 new_handler()函数
    — 对于移植性要求较高的代码,需要考虑 new 的具体细节

小结:

  • 不同的编译器在动态内存分配上的实现细节不同
  • malloc 函数在内存申请失败时返回 NULL
  • new 关键字在内存申请失败时
    — 可能返回NULL
    — 可能抛出bad_alloc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值