为什么析构函数不能具有引用限定符?

问题描述 投票:7回答:1

是否有原因(除了由于标准如此规定以外>)为什么不允许以下代码?

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

我知道这是非法的,但我想知道为什么。

我在考虑旧的避免未命名实例

的问题,即使用保护对象时,例如:
void do_something()
{
    std::lock_guard{my_mutex};
    // some synchronized operation
}

这是合法代码,但显然很容易出错,因为锁保护在构造后会立即被销毁,因为它是一个临时(未命名)对象。

我打算做这样的事情

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

如果类型被构造为临时类型,则会出现编译器错误。

是否有原因(除了因为标准这样说外),为什么不允许以下代码? struct Foo {〜Foo()&& {}〜Foo()&{}};我知道这是非法的,但我...

c++ destructor ref-qualifier
1个回答
4
投票

首先,每个类只能有一个析构函数。在析构函数上允许ref-qualifiers

© www.soinside.com 2019 - 2024. All rights reserved.