编译器默认会为一个类生成几个默认函数
1.默认构造函数
2.默认析构函数
3.默认拷贝构造函数
4.默认赋值函数
5.移动构造函数
6.移动拷贝函数
class onceToken {
public:onceToken () //默认构造函数 default constructor~onceToken () //默认析构函数 destructoronceToken (const onceToken &) //默认拷贝构造函数 copy constructoronceToken & operator=(const onceToken &) //默认赋值函数 copy assignment operatoronceToken (const onceToken && rhs) //移动构造函数 C++11, move constructoronceToken & operator=(onceToken &&) //移动拷贝函数 C++11, move assignment operator
};
=delete的几处作用
1. 禁止编译器默认生成的函数
不想使用其中某个,可以将其定义为private,或者使用=delete。
建议既定义成private,同时使用=delete
#include <iostream>
using namespace std;class onceToken {public:onceToken(){};~onceToken(){};private://onceToken() = delete; //禁止生成默认构造函数onceToken(const onceToken &) = delete; //禁止生成默认拷贝构造函数onceToken(onceToken &&) = delete; //禁止生成默认移动构造函数onceToken &operator=(const onceToken &) = delete; //禁止生成默认赋值函数onceToken &operator=(onceToken &&) = delete; //禁止生成移动拷贝函数
};
2. delete 关键字也可以禁用其它类成员函数
#include <iostream>
using namespace std;class Token {
public:void fun(int a) {}void fun(float a) = delete;
};int main(int argc, char *argv[]) {Token token;token.fun(1); // OKtoken.fun(0.65); // 错误,调用失败return 0;
}
本文链接:https://my.lmcjl.com/post/7409.html
展开阅读全文
4 评论