当引用指向指针(堆中的对象)的对象时,引用作用域结束
What happens when a reference point to an object of a pointer (object in the heap) when the reference scope end?
当引用作用域结束时,指向指针对象(堆中的对象)的引用点会发生什么?我的意思是,堆中的对象是销毁还是保留:
例句:
void f(){
Object &obj= *new Object() ;
int &i = new int;
}
void main(){
f();
}
对象在f的末尾被销毁,必须在末尾调用"delete &n"。原始值也一样吗?如果它必须销毁,那么我如何创建一个常量原始值的副本并将其赋值给引用而不使用"new"?
(语法或拼写错误,以及原始问题的输入错误)
Object &n = new Object();
这将无法编译。像new Object()
这样的new-expression返回一个指向动态分配对象的指针。不能用Object*
初始化Object&
如果你有一个T&
类型的引用,你应该用T
类型的对象初始化它。这就是参考的工作原理。T&
是对T
对象的引用。
你可以这样做:
Object &n = *new Object();
这将解引用new-expression返回的指针(使用*
),以获得它指向的Object
,然后用该Object
初始化引用。但是,我不建议这样做。它只是隐藏了对象是动态分配的事实。
不,这样做不会影响动态分配对象的生命周期。如果您使用new-expression创建对象,它具有动态存储时间,因此您必须在某个时候对其进行delete
。
首先,您需要决定。你想要这个:
Object &n = * new Object();
或者你想要这个:
Object* &n = new Object();
无论如何,当引用超出作用域时,它们不会导致对象被删除。在您的示例中,您将出现内存泄漏,无法恢复堆中分配的Object
和int
。
首先:你的代码将无法编译。
你最多应该这样做(只是为了编译…):
Object &n = *(new Object());
但是我不推荐这种做法。
关于第二个问题:总是你写"new",总是你必须在某个时间删除。
相关文章:
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- C++对象引用返回不同的值
- 对象引用中的字段以不同的方法返回不同的值
- 通过向构造函数其他对象引用页面来创建对象
- 为什么在对象引用恒定时允许更改为另一个类的指针的成员变量
- 如何在C++中读取 HDF5 对象引用
- C++ 未定义的对象引用
- 从函数返回 libconfig 类设置对象引用
- qt vsaddin错误对象引用未设置为对象的istanse
- 在这种情况下,为什么使用 *此必需的对象引用返回对象引用
- 基本C - 构造contaning对象引用,并将其作为方法参数传递
- C :将对象引用作为参数给出错误:呼叫class :: function()的匹配函数
- C++OOP基础知识-是否正确返回对象引用
- 使用对象引用(可能)在调用destructor后使用对象引用
- 创建返回对象引用的成员函数的最简单方法
- 如何在C++上使用对象引用删除对象
- JNI/Android NDK-维护全局对象引用
- 为什么有些类方法返回"*this"(self的对象引用)?
- 在C++中返回伪对象引用的规则