C ++中的右值引用可延长临时对象的生命周期

时间:2016-05-18 02:40:20

标签: c++ rvalue-reference temporary-objects

使用Stack Overflow问题 Does a const reference prolong the life of a temporary? ,我理解const引用如何延长临时对象的生命周期。

我知道右值参考也可以延长临时物体的寿命,但我不知道是否存在差异。

所以,如果我这样编码:

#include <string>
#include <iostream>
using namespace std;

class Sandbox
{
public:
    Sandbox(string&& n) : member(n) {}
    const string& member;
};

int main()
{
    Sandbox sandbox(string("four"));
    cout << "The answer is: " << sandbox.member << endl;
    return 0;
}

它会起作用还是会出现与上面链接相同的错误?

如果我的代码如下,该怎么办?

class Sandbox
{
public:
    Sandbox(string&& n) : member(move(n)) {}
    const string&& member;
};

它会起作用吗?

1 个答案:

答案 0 :(得分:1)

string("four")临时存在于构造函数调用期间(在链接问题的答案中对此进行了解释)。一旦构造了对象,这个临时就会被破坏。类中的引用现在是对被破坏对象的引用。使用引用导致未定义的行为。

这里使用右值参考没有区别。