C++ 当引用范围结束时,引用指向指针的对象(堆中的对象)会发生什么情况?
当引用范围结束时,引用指向指针的对象(堆中的对象)会发生什么情况?我的意思是堆中的对象是销毁的还是保留的: e、 g: 对象在f结尾处被销毁,或者在f结尾处必须调用“delete&n”?原语值也是这样吗? 如果必须销毁,那么我如何创建一个常量原语值的副本并将其分配给一个引用,而不使用“new”来创建它C++ 当引用范围结束时,引用指向指针的对象(堆中的对象)会发生什么情况?,c++,visual-c++,C++,Visual C++,当引用范围结束时,引用指向指针的对象(堆中的对象)会发生什么情况?我的意思是堆中的对象是销毁的还是保留的: e、 g: 对象在f结尾处被销毁,或者在f结尾处必须调用“delete&n”?原语值也是这样吗? 如果必须销毁,那么我如何创建一个常量原语值的副本并将其分配给一个引用,而不使用“new”来创建它 (抱歉语法或语法错误,以及原始问题中的键入错误)首先,您需要做出决定。你想要这个: Object &n = * new Object(); Object* &n = new Ob
(抱歉语法或语法错误,以及原始问题中的键入错误)首先,您需要做出决定。你想要这个:
Object &n = * new Object();
Object* &n = new Object();
或者你想要这个:
Object &n = * new Object();
Object* &n = new Object();
无论如何,当引用超出范围时,它们不会导致对象被删除。
在您的示例中,将出现内存泄漏,无法恢复堆中定位的对象
和int
Object &n = new Object();
这将无法编译。类似于newobject()
的新表达式返回指向动态分配对象的指针。不能用对象*
初始化对象&
如果有类型为T&
的引用,则应使用类型为T
的对象对其进行初始化。这就是引用的工作原理T&
是对T
对象的引用
您可以这样做:
这将取消引用新表达式返回的指针(使用*
)以获取它指向的对象,然后使用该对象初始化引用。但是,我不建议这样做。它只是隐藏了对象是动态分配的事实
不,这样做不会影响动态分配对象的生存期。如果您使用新表达式创建对象,它具有动态存储持续时间,因此您必须在某个时间点删除它。首先:您的代码将无法编译
您最多应该执行以下操作(仅针对编译…):
Object&n=*(newobject())但是我不推荐这种做法
关于第二个问题:总是写“new”,总是必须在一段时间内删除。你似乎把引用和指针混为一谈。你的代码示例将无法编译。