=delete 使用

编译器默认会为一个类生成几个默认函数
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 评论

留下您的评论.