zoukankan      html  css  js  c++  java
  • C++11 标准新特性:Defaulted 和 Deleted 函数

    C++11 标准新特性:Defaulted 和 Deleted 函数 (转)

    C++ 的类有四类特殊成员函数,它们分别是:默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。

    =default

    程序员只需在函数声明后加上“=default;”,就可将该函数声明为 defaulted 函数,编译器将为显式声明的 defaulted 函数自动生成函数体。例如:

    class X{ 
    public: 
     X()=default; 
     X(int i){ 
       a = i; 
     }     
    private: 
     int a; 
    }; 
     
    X x;

    编译器会自动生成默认构造函数X::X(){},该函数可以比用户自己定义的默认构造函数获得更高的代码效率。

    =delete

    程序员只需在函数声明后加上“=delete;”,就可将该函数禁用。

    虽然只显式的禁用了一个拷贝构造函数和一个拷贝赋值操作符,但是由于编译器检测到类X存在用户自定义的拷贝构造函数和拷贝赋值操作符的声明,所以不会再隐式的生成其它参数类型的拷贝构造函数或拷贝赋值操作符,也就相当于类X没有任何拷贝构造函数和拷贝赋值操作符,所以对象间的拷贝和赋值被完全禁止了。

    class X{            
         public: 
           X(); 
           X(const X&) = delete;  // 声明拷贝构造函数为 deleted 函数
           X& operator = (const X &) = delete; // 声明拷贝赋值操作符为 deleted 函数
         }; 
     
     int main(){ 
      X x1; 
      X x2=x1;   // 错误,拷贝构造函数被禁用
      X x3; 
      x3=x1;     // 错误,拷贝赋值操作符被禁用
     }
  • 相关阅读:
    原生searchView 自定义样式
    面试问题总结
    Android Studio开发环境搭建
    JAVA基本程序设计结构
    JAVA大数使用
    sql
    普通树的递归遍历
    6_43_递归交换二叉树中所有节点的左右子树
    6_42_二叉树递归求叶子节点个数
    6_44_二叉树中值为x的节点为根的子树的深度
  • 原文地址:https://www.cnblogs.com/Galesaur-wcy/p/14900074.html
Copyright © 2011-2022 走看看