c++内存管理3: new handler、=default、=delete函数

 1、new_handler

new_handler位于头文件< new >中 
当new无法成功申请内存,在抛出异常之前,new会调用一个系统默认或用户指定的错误处理函数,也就是这里的new_handler。我们可以通过set_new_handler来设置我们的错误处理函数。

2、 =default

一般地,编译器会默认为一个类生成:

默认构造函数:X()
拷贝拷贝构造函数:X(const X &)
拷贝赋值运算符:X& operator(const X&)
移动构造函数:X(x&&)
析构函数:~X()
如果用户自定义了其中部分或全部,则编译器不再生成对应的。

函数 = default明确地告诉编译器,自己不生成这些中的一些或全部,由编译器来生成。

 使用默认构造函数,使用默认析构函数

3、=delete函数

 定义一个类的成员函数时,如果后面使用"=delete"去修饰,那么就表示这个函数被定义为deleted,也就意味着这个成员函数不能再被调用,否则就会出错。

在C++11之前,当我们希望一个类不能被拷贝,就会把构造函数定义为private,但是在C++11里就不需要这样做了,只需要在构造函数后面加上=delete来修饰下就可以了。

第二个应用就是避免出现隐式转换

void func(int data) { printf("data: %d\n", data); }

void func(double data)=delete;

当使用func(100.0),为避免发生隐式转换而去使用第一个函数,那么就标明没有对应double这个参数的函数,也就是不会让其使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贪睡的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值