[C++11]中 =delete和=default
Posted Overboom
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++11]中 =delete和=default相关的知识,希望对你有一定的参考价值。
1 =delete作用于普通函数
C++11中,当我们定义一个类的成员函数时,如果后面使用"=delete"去修饰,那么就表示这个函数被定义为deleted,也就意味着这个成员函数不能再被调用,否则就会出错
#include <cstdio>
class TestClass
public:
int func(int data)=delete;
;
int main(void)
TestClass obj;
obj.func(100);
return 0;
编译时直接报错,如下
2 =delete作用于构造函数
在C++11之前,当我们希望一个类不能被拷贝,就会把构造函数定义为private,但是在C++11里就不需要这样做了,只需要在构造函数后面加上=delete来修饰下就可以了。
3 =default作用于构造函数
当类中没有构造函数的时候,编译器就会加一个默认构造函数;当你加了一个构造函数的时候,例如重载的一个构造函数,那么就不会再有默认构造函数。
class CTest
public:
CTest() = default; //语句1
CTest(int x)
printf("this is CTest(int) create x\\n");
~CTest()
printf("this is ~CTest destory\\n");
CTest& operator= (const CTest&) = delete; //语句2
;
int main()
CTest* ptr = new CTest; //此处如果没有语句1,则编译失败;
CTest p1(1);
CTest p2(2);
p2 = p1; //此处编译失败,因为有语句二存在,已经将赋值操作符设置为已删除函数
return 0;
以上是关于[C++11]中 =delete和=default的主要内容,如果未能解决你的问题,请参考以下文章
转C++11 标准新特性:Defaulted 和 Deleted 函数
C/C++C++11新特性:=default 和 =delete
c_cpp C ++ 11标准新特性:Defaulted和Deleted函数
[C++11 类的改进] --- 继承控制:=default和=delete