禁止通过构造函数将右值绑定到成员 const 引用

2024-02-17

我正在研究一个矩阵视图类,其构造函数将矩阵作为参数并将其绑定到const参考会员。我非常希望避免绑定右值,因为它们不通过构造函数参数绑定,并且我们最终会得到一个悬空引用。我想出了以下内容(简化的代码):

struct Foo{};

class X
{
    const Foo& _foo;
public:    
    X(const Foo&&) = delete;       // prevents rvalue binding
    X(const Foo& foo): _foo(foo){} // lvalue is OK
};

Foo get_Foo()
{
    return {};
}

const Foo get_const_Foo()
{
    return {};
}

Foo& get_lvalue_Foo()
{
    static Foo foo;
    return foo;
}

int main() 
{
//  X x1{get_Foo()};        // does not compile, use of deleted function
//  X x2{get_const_Foo()};  // does not compile, use of deleted function
    X x3{get_lvalue_Foo()}; // this should be OK
}

基本上我删除了需要的构造函数const Foo&&作为参数。请注意,我需要const因为否则有人可能会回来const Foo来自函数,在这种情况下它将绑定到const Foo&构造函数。

问题:

这是禁用右值绑定的正确范例吗?我错过了什么吗?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

禁止通过构造函数将右值绑定到成员 const 引用 的相关文章

随机推荐