15

= default次はC++11標準(クラスの定義外)に従って合法ですか?

// 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 に答える