一、=default,=delete
1、首先我们要回顾一下类默认函数的概念:
- C++中,当我们设计与编写一个类时,若不显著申明,则类会默认为我们提供如下几个函数:
(1)构造函数(A())、(2)析构函数(~A())、(3)拷贝构造函数(A(A&))、(4)拷贝赋值函数(A& operator=(A&))、(5)移动构造函数(A(A&&))、(6)移动赋值函数(A& operator=(A&&))
注意:拷贝函数如果涉及指针就要区分浅拷贝(指针只占4字节,浅拷贝只把指针所占的那4个字节拷贝过去)和深拷贝(不仅要拷贝指针所占的字节,还要把指针所指的东西也要拷贝过去);
以及全局的默认操作符函数
(1)operator,(2)operator &,(3)operator &&,(4)operator *,(5)operator->,(6)operator->*,(7)operator new,(8)operator delete。
2、何时需要自定义big—three(构造函数、拷贝构造、拷贝赋值)/big-five(新增移动构造函数、移动赋值函数)
如果类中带有point member(指针成员),那我们就可以断定必须要给出big-three,如果不带,绝大多与情况下就不必给出big-three,用默认的就好。
总结:
//=default 使用编译器默认提供
//=delete 禁止使用
//override 显示重载
//final (1)、禁止基类被继承,(2)、禁止虚函数被重写;
//noexcept 禁止抛出异常 void f() noexcept;
注意:
1、可以都多个构造函数(重载),单拷贝构造只能有一个,赋值函数只能有一个
参考:
https://www.cnblogs.com/laiyingpeng/p/11535418.html