gpt4 book ai didi

c++ - 当引用变量为 'dies' 时,引用变量会发生什么?

转载 作者:行者123 更新时间:2023-11-30 03:35:34 25 4
gpt4 key购买 nike

假设我创建了一个名为 MyClass 的类,其中包含一个引用变量 m_my_resource。这个引用变量本质上只是一个与其他内存位置关联的命名别名。

我的类(class)

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 的引用(左值引用)。

但是,在我的主函数中,我构造了一个带有临时对象(右值)的 MyClass 实例。为什么我的代码能够编译? my_class 现在不包含与某个临时内存位置关联的引用变量吗?本质上,与引用变量相关联的变量现在已经“死亡”,引用变量会发生什么?

此外,在这种情况下我希望我的类有一个接受右值引用的构造函数吗?

最佳答案

Why is my code able to compile?

仅仅因为您的代码可以编译,并不意味着它可以正常工作。否则,世界上的每个程序都会自动无错误,因为它成功地通过了编译阶段,并且没有任何人需要学习如何使用调试器。

显然,事情不是这样进行的。

Doesn't my_class now contain a reference variable that is associated with some temporary memory location?

是的,确实如此。

Essentially the variable in which the reference variable was associated with has now 'died', what happens to the reference variable?

您的引用变量没有任何变化。它仍然存在。但是引用对象——这意味着试图调用它的方法或访问它的成员——results in undefined behavior .

关于c++ - 当引用变量为 'dies' 时,引用变量会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41210288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com