空类中自带的六大默认函数,及类中的基础关键字explicit
一.空类中自带的函数有6个,分别是:
class Base { public: // class默认private权限 Base () = default; // 默认构造 ~Base () = default; // 默认析构 Base (const Base &b)= default; // 默认拷贝 Base &operator =(const Base &b)= default; // 默认赋值 Base (Base &&b)= default; // 默认移动拷贝 c++11后加入 Base &operator =(Base &&b)= default; // 默认移动赋值 c++11后加入 }
二.类型和函数的优化建议
1.使用成员初始化方式对类中成员进行默认值初始化;
初始化列表先后不代表初始化的顺序,初始化顺序由声明的先后决定!
class Myclass { public: int m_a; int m_b; Myclass (int a,int b): m_b(b),m_a(a){} // 初始化顺序 m_a -》 m_b }
2.如果定义 或者 “=delete” 了任何拷贝、移动、析构函数,请定义 或者 “=delete” 它们全部;
在函数声明后加入=delete
即可将该函数标记为禁止调用,一旦该函数被调用则会导致编译错误。可以将旧版本的函数标记delete。
在函数声明后面加default,相当于对此函数进行默认的定义
3.采用union用以节省内存;
三.explicit & 初始化列表&默认构造
存在初始化函数的类,都会加“explicit”关键字进行修饰,禁止隐式转换(只能直接显示调用)