【发布时间】:2020-02-28 08:28:49
【问题描述】:
是否有理由(除了因为标准这么规定)为什么不允许使用以下代码?
struct Foo
{
~Foo() && {}
~Foo() & {}
};
我知道这是非法的,但我想知道为什么。
我在考虑旧的避免未命名实例问题,即在使用保护对象时,例如:
void do_something()
{
std::lock_guard{my_mutex};
// some synchronized operation
}
这是合法代码,但显然容易出错,因为锁守卫在构造后会立即被销毁,因为它是一个临时(未命名)对象。
我本来打算做这样的事情
struct Foo
{
~Foo() && = delete;
~Foo() & = default;
};
如果类型被构造为临时类型,则会出现编译器错误。
【问题讨论】:
-
引用限定符的目的应该是什么?
-
你有什么样的要求?
-
我会说,因为析构函数会破坏对象。没有理由为什么它应该有任何限定符。引用的对象永远不会被破坏。对于使用这些限定符的类,你会怎么做?
-
@Dr.-Ing.GerhardStein 不确定您所说的“引用的对象永远不会被破坏” 是什么意思。这就是悬空引用的来源。
-
如果没有构造函数,我真的看不出有这个的意义。
标签: c++ destructor ref-qualifier