[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

[C++11 类的改进] --- 继承控制:=default和=delete

[C++11 类的改进] --- 继承控制:=default和=delete