类外的默认构造函数/析构函数?

时间:2013-01-10 11:19:13

标签: c++ c++11 constructor destructor default-constructor

以下是否符合C ++ 11标准(= default在类定义之外)?

// In header file
class Test
{
    public:
        Test();
        ~Test();
};

// In cpp file
Test::Test() = default;
Test::~Test() = default;

1 个答案:

答案 0 :(得分:8)

是的,特殊成员函数可以在.cpp文件中默认定义为外联。要意识到,通过这样做,内联默认函数的某些属性将不适用于您的类。例如,如果您的复制构造函数是默认定义的,那么您的类将不会被视为可以轻易复制(这也会使其无法被识别为POD)。类似地,默认定义的外联析构函数将使您的类型不符合琐碎(或POD)的条件。

如果您希望使用非内联复制构造函数并控制其定义位置(可能需要控制所需的生成模板定义),这可能很有用,但不希望自己手动定义它使用手工制作的成员初始化列表,这将是费力的,可能会在维护状态下失效。