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