Tim*_*imo 7 c++ destructor ref-qualifier
是否有理由(除了因为标准这么说)为什么不允许使用以下代码?
struct Foo
{
~Foo() && {}
~Foo() & {}
};
Run Code Online (Sandbox Code Playgroud)
我知道这是非法的,但我想知道为什么。
我在考虑避免未命名实例问题,即在使用保护对象时,例如:
void do_something()
{
std::lock_guard{my_mutex};
// some synchronized operation
}
Run Code Online (Sandbox Code Playgroud)
这是合法的代码,但显然很容易出错,因为锁保护会在构造后立即销毁,因为它是一个临时(未命名)对象。
我正打算做这样的事情
struct Foo
{
~Foo() && = delete;
~Foo() & = default;
};
Run Code Online (Sandbox Code Playgroud)
如果类型被构造为临时类型,则会出现编译器错误。
首先,每个类必须只有一个析构函数。在析构函数上允许引用限定符将使析构函数重载成为可能。
const另一个可能的原因是与和volatile限定符保持一致:
不得声明析构函数
const,volatile或const volatile(9.3.2)。const并且volatile语义(7.1.5.1)不适用于被破坏的对象。
我想,为了保持一致性,区分右值和左值并不适用于被破坏的对象。
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |