1、 =default 和=delete 概述
任何事物的出现都必然有着其出现的理由,伴随着每一个新的概念产生都会带来一系列的便利和价值。C++在不断的演变与发展,与此同时,伴随着许多新的特性和功能产生。=default、=delete 是C++11的新特性,分别为:显式缺省(告知编译器生成函数默认的缺省版本)和显式删除(告知编译器不生成函数默认的缺省版本)。C++11中引进这两种新特性的目的是为了增强对“类默认函数的控制”,从而让程序员更加精准地去控制默认版本的函数。其具体的功能和使用方法下面将一一道来。2、 类与默认函数
在讲解关键字 default和delete 之前,先对类和类的默认函数作下描述与说明,从而加深对这两个关键字的理解与认知。既要知其然,也要知其所以然。C++中,当我们设计与编写一个类时,若不显著写明,则类会默认为我们提供如下几个函数: (1)构造函数 (2)析构函数 (3)拷贝构造函数 (4)拷贝赋值函数(operator=) (5)移动构造函数 以及全局的默认操作符函数: (1)operator, (2)operator &(3)operator &&
(4)operator *
(5)operator->
(6)operator->*
(7)operator new
(8)operator delete 注:若我们在类中实现了这些版本之后,编译器便不会生成其对应的默认函数版本,这时需要我们显式的写上其对应的默认函数版本。 如例1所示:
/*************************************************************************
* File Name: Student.cpp
* Author: The answer
* Function: Other
* Mail: 2412799512@qq.com
* Created Time: 2018年07月17日 星期二 23时08分20秒
************************************************************************/
#include
using namespace std;
class Student
{
public:
Student(const int a,const int b)
:m_a(a)
,m_b(b)
{
}
int getA()const{return m_a;}
int getB()const{return m_b;}
private:
int m_a;
int m_b;
};
int main(int argc,char **argv)
{
Student stu(1,2);
cout<
cout<
Student stu1; //编译失败,报错: no matching function for call to ‘Student::Student(