【发布时间】:2016-12-18 16:13:34
【问题描述】:
假设我创建了一个名为MyClass 的类,其中包含一个引用变量m_my_resource。这个引用变量本质上只是一个与其他内存位置关联的命名别名。
我的班级
class MyClass
{
public:
MyClass(const MyResource& my_resource) :
m_my_resource(my_resource){}
private:
const MyResource& m_my_resource;
}
现在假设我尝试执行以下操作:
main
{
MyClass my_class(utils::getMyResource());
//continue doing stuff
}
在这种情况下究竟会发生什么?我已将MyClass 定义为只有一个构造函数,它接受对MyResource 的引用(左值引用)。
但是,在我的 main 函数中,我用一个临时对象(右值)构造了一个 MyClass 的实例。为什么我的代码能够编译? my_class 现在不包含与某个临时内存位置相关联的引用变量吗?本质上,与引用变量关联的变量现在已经“死亡”,引用变量会发生什么?
此外,在这种情况下,我是否希望我的类有一个接受右值引用的构造函数?
【问题讨论】:
-
相关/欺骗:stackoverflow.com/questions/14735630/… 也许更具体,但前者的欺骗:stackoverflow.com/questions/30519148/…
-
还有“为什么我的代码能够编译?” 很多 错误的 C++ 代码仍然可以编译。最后但同样重要的是,请每个问题一个问题。
-
@BaummitAugen 你链接到的问题我很难理解。
MyClass的实例是否可以获取此临时对象的所有权? -
不适用于您当前的
const&设置,没有。临时在构造函数表达式的末尾死亡。
标签: c++ lvalue rvalue temporary-objects