C++ 当引用范围结束时,引用指向指针的对象(堆中的对象)会发生什么情况?

C++ 当引用范围结束时,引用指向指针的对象(堆中的对象)会发生什么情况?,c++,visual-c++,C++,Visual C++,当引用范围结束时,引用指向指针的对象(堆中的对象)会发生什么情况?我的意思是堆中的对象是销毁的还是保留的: e、 g: 对象在f结尾处被销毁,或者在f结尾处必须调用“delete&n”?原语值也是这样吗? 如果必须销毁,那么我如何创建一个常量原语值的副本并将其分配给一个引用,而不使用“new”来创建它 (抱歉语法或语法错误,以及原始问题中的键入错误)首先,您需要做出决定。你想要这个: Object &n = * new Object(); Object* &n = new Ob

当引用范围结束时,引用指向指针的对象(堆中的对象)会发生什么情况?我的意思是堆中的对象是销毁的还是保留的:

e、 g:

对象在f结尾处被销毁,或者在f结尾处必须调用“delete&n”?原语值也是这样吗? 如果必须销毁,那么我如何创建一个常量原语值的副本并将其分配给一个引用,而不使用“new”来创建它


(抱歉语法或语法错误,以及原始问题中的键入错误)

首先,您需要做出决定。你想要这个:

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”,总是必须在一段时间内删除。

你似乎把引用和指针混为一谈。你的代码示例将无法编译。