15

根据 C++11 标准(= default在类定义之外),以下内容是否合法?

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

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

1 回答 1

12

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

如果您希望拥有一个非内联复制构造函数并控制它的定义位置(可能控制它需要的生成的模板定义),但不希望自己手动定义它,这可能很有用- 精心制作的成员初始化器列表,这将是费力的,并且在维护时可能会过时。

于 2013-01-16T01:18:04.503 回答