7

次のコードが許可されていない理由 (標準がそう言っている以外) はありますか?

struct Foo
{
    ~Foo() && {}
    ~Foo() & {}
};

違法なのはわかっていますが、その理由を知りたいです。

私は古き良き名前のないインスタンスの問題を回避することについて考えていました。つまり、次のようなガードオブジェクトを使用する場合:

void do_something()
{
    std::lock_guard{my_mutex};
    // some synchronized operation
}

これは正当なコードですが、ロック ガードは一時的な (名前のない) オブジェクトであるため、構築直後に破棄されるため、明らかにエラーが発生しやすくなっています。

こんなことする予定だったのに

struct Foo
{
    ~Foo() && = delete;
    ~Foo() & = default;
};

型が一時的なものとして構築されている場合は、コンパイラ エラーが発生します。

4

1 に答える 1