为什么不允许使用以下代码是否有原因(除了标准规定之外)?
struct Foo
{
~Foo() && {}
~Foo() & {}
};
我知道这是非法的,但我想知道为什么。
我在考虑旧的避免未命名实例问题,即使用保护对象时,例如:
void do_something()
{
std::lock_guard{my_mutex};
// some synchronized operation
}
这是合法代码,但显然容易出错,因为锁守卫在构造后会立即被销毁,因为它是一个临时(未命名)对象。
我打算做这样的事情
struct Foo
{
~Foo() && = delete;
~Foo() & = default;
};
如果类型被构造为临时类型,则会出现编译器错误。