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这个参数的函数,也就是不会让其使用

posted @ 2022-05-15 21:48  贪睡地蜗牛  阅读(33)  评论(0编辑  收藏  举报