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;
}