美文网首页C/C++
C++11关键字delete

C++11关键字delete

作者: cx7 | 来源:发表于2018-09-06 00:28 被阅读0次

    delete

    delete的原用法是用于释放new申请的内存
    
    int *cacheMem = new int;
    delete cacheMem;
    
    int *cacheMem = new int[10];
    delete[] cacheMem;
    
    C++11标准对delete做了扩展 可以用于指示编译器删除不需要的函数生成
    意味着可以做到:
    1. 删除某种类成员函数 
    2. 删除某种模版类型函数
    

    删除指定的函数

    可以删除类的某个成员函数 比如默认生成的构造函数
    
    类默认生成的无参构造函数经常造成这个问题
    
    class test {
    public:
         test() {}
    };
    
    test ctx(); //返回类型为test的无参函数ctx
    ctx并非是test类型的对象 反而是一个函数
    
    屏蔽掉无参数函数或者改用{}来声明都可以解决这个问题
    test ctx; //ctx是test类型的对象
    test ctx{}; //ctx是test类型的对象
    
    或者修改
    class test {
    public:
         test() {} = delete;
    };
    
    test ctx(); //ctx是test类型的对象
    

    删除某种类型的模版函数

    template <typename T>
    void printVal(T &t);
    void printVal(Char t) = delete; //被删除 当别处调用传入char类型参数时 编译器会报错
    

    相关文章

      网友评论

        本文标题:C++11关键字delete

        本文链接:https://www.haomeiwen.com/subject/hqqawftx.html