有时我看到人们使用右值引用作为成员,我总是想知道这是如何可能的以及它如何不会导致生命周期问题。以此为例:
class Foo
{
public:
Foo(int&& i)
: i_(std::move(i))
{
}
void printNum()
{
std::cout << i_ << std::endl;
}
private:
int&& i_;
};
int main()
{
Foo f{5};
f.printNum(); // Outputs 5 every time
}
本例中整数 5 存在于什么范围内?当调用下一行时,传递给 Foo 构造函数的右值肯定已被破坏,那么为什么对 printNum
的调用不能保证未定义的行为呢?我们不是试图访问不再使用的内存吗?
最佳答案
int
在表达式 Foo f{5};
的末尾被销毁,因此程序具有未定义的行为。
关于c++ - 为什么可以使用右值引用作为成员而没有生命周期问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67526169/