gpt4 book ai didi

c++ - 防止通过引用传递右值

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:07 26 4
gpt4 key购买 nike

在我的项目中,大多数对象都是在 arena 中创建的,并且保证它们在用户 session 期间存在。所以对于某些类来说,将 const 引用作为成员字段是非常安全的,例如:

class A {
public:
A(const string& str) : str_(str) {}

private:
const string& str_;
};

但是这里有一个陷阱。可能会错误地通过以下方式创建 A 的实例:

A a("some temporal string object");

在该行中,时间 string 对象已被隐式创建和销毁。所以在那之后 a 存储了不正确的引用。

如何防止这种行为?要是编译出错就更好了...

最佳答案

你只需要有一个与右值匹配得更好的重载,这样编译器就可以在 const& 上使用它。

所以,一个临时变量比 const& 更匹配 &&,所以你只需要提供这样一个构造函数并删除它:

class A {
public:
A(const string& str) : str_(str) {}
A(string&&) = delete; // this constructor is a better match for rvalues

private:
const string& str_;
};

关于c++ - 防止通过引用传递右值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44715433/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com