Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以在成员引用中安全地存储移动的对象?_C++_C++11_Reference_Move Semantics - Fatal编程技术网

C++ 是否可以在成员引用中安全地存储移动的对象?

C++ 是否可以在成员引用中安全地存储移动的对象?,c++,c++11,reference,move-semantics,C++,C++11,Reference,Move Semantics,以下代码是否安全,或者在构造C后,mus可能是一个悬空引用 class C { public: C(string&& s) : m_s{s} {} private: string& m_s; }; 不安全,考虑下面的例子: C c(std::string("42")); 在这里,您向构造函数传递一个临时值。这样就可以创建一个悬挂引用。不,这样不安全。此外,成员常量引用不会延长临时变量的生存期(因此这也不是一个选项)。相反,你应该做的是从你的临时课程中

以下代码是否安全,或者在构造
C
后,
mus
可能是一个悬空引用

class C {
public:
    C(string&& s) : m_s{s} {} 
private:
    string& m_s;
};

不安全,考虑下面的例子:

C c(std::string("42"));

在这里,您向构造函数传递一个临时值。这样就可以创建一个悬挂引用。

不,这样不安全。此外,成员常量引用不会延长临时变量的生存期(因此这也不是一个选项)。相反,你应该做的是从你的临时课程中构建一个价值观,将其“吸收”到你的课堂中:

class C {
public:
    C(string&& s) : m_s{std::move(s)} {} 
private:
    string m_s;
};

制作
mus
a
const字符串&
会使它安全吗?我知道在涉及引用和常量引用时有不同的生存期扩展规则。@Danra不,不会的。即使const符合条件,它仍然是一个悬挂引用。出于好奇,是否存在原始代码不会创建悬挂引用的情况?@Danra
std::string s;C C(标准:移动);不会是一个悬而未决的引用,因为
s
c
更长寿。但人们并不期望你坚持正确的参考资料;他们希望你马上对他们做点什么。