zoukankan      html  css  js  c++  java
  • c++11 delete禁用函数

    c++11添加了delete关键字。

    不想用那个函数,在那个函数后面加 = delete就可以了;

    比如:

    在函数重载中,可用 delete 来滤掉一些函数的形参类型,如下:
    bool IsLucky(int number);        // original function
    bool IsLucky(char) = delete;     // reject chars
    bool IsLucky(bool) = delete;     // reject bools
    bool IsLucky(double) = delete;   // reject doubles and floats

    上述功能看似没啥作用,都delete为啥还要写。

    但是,因为c++对每个类都会默认生出6个函数。有时间后我们不想我们的类被拷贝或赋值。我们可以把拷贝构造函数,重载赋值函数定义为私有。

    但是定义成私有,类内部还是可以拷贝,赋值。 我想要无论如何都不能调用拷贝、赋值怎么办。

    当然是用delete一下啦。

    以下是测试代码:

    #include <iostream>
    
    using namespace std;
    
    class Test {
    public:
        Test() {
        }
        Test(const Test&) = delete;
        Test& operator = (const Test&) = delete;
    };
    
    class Test1 : public Test{
    
    };
    
    int main()
    {
        Test test;
        //Test t2 = test;//编译错误
        Test1 t1;
        //Test1 t2 = t1;//编译错误
        return 0;
    }

    上述代码可以看出,delete 函数后面,就把这个函数完全消失掉了。继承也木有用了。

  • 相关阅读:
    ZOJ 3795 Grouping
    ZOJ 3791 An Easy Game
    ZOJ 3790 Consecutive Blocks
    POJ 1451 T9
    POJ 1141 Brackets Sequence
    POJ 2411 Mondriaan's Dream
    POJ 2513 Colored Sticks
    Eclipse 快捷键大全
    C# lock关键字(多线程)
    C# 内部类
  • 原文地址:https://www.cnblogs.com/chenhuan001/p/7425652.html
Copyright © 2011-2022 走看看