2017-06-14 75 views
4

显式声明类特殊函数默认值有什么区别?为什么显式声明类特殊函数为“default”

class Myclass 
{ 
public: 

    Myclass() = default; 
    virtual ~Myclass() = default; 

    Myclass(MyClass&&) = default; 
    Myclass& operator=(MyClass&&) = default; 

    Myclass(const MyClass&) = default; 
    Myclass& operator=(const MyClass&) = default; 
}; 

MyClass{}; 

这2个声明有什么区别? 为什么显式指定默认行为函数为默认?

+0

'class MyClass {};'版本没有虚拟析构函数。 – sp2danny

+0

'这2条声明有什么区别?'2条声明是什么?您似乎只包含了每个特殊成员函数的1个声明。 –

回答

8

因为在某些条件下,编译器可能不会添加构造函数,析构函数或运算符,即使您可能需要编译器生成的默认值。然后,通过使用明确的default指示符,编译器无论如何都会这样做。

你可以在例如this class reference

+3

有时也是明确的可以增加清晰度,您表示默认生成一个是由选择而不是错误。 –

相关问题