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