除了“因为标准规定如此”的原因外,以下代码不允许的原因是什么?
struct Foo
{
~Foo() && {}
~Foo() & {}
};
我知道这是非法的,但我想知道为什么。
我在思考一个老问题-避免未命名实例,例如在使用守卫对象时:
void do_something()
{
std::lock_guard{my_mutex};
// some synchronized operation
}
这是合法的代码,但显然容易出错,因为锁守卫在构造完成后会立即被销毁,因为它是一个临时(无名)对象。
我计划做这样的事情
struct Foo
{
~Foo() && = delete;
~Foo() & = default;
};
如果以临时方式构建类型,则会收到编译器错误提示。