可以删除作为引用传递的对象吗?
Can we delete an object passed as by reference?
代码如下
fun(int &a)
{
delete &a;
}
main()
{
int *a = new int(10);
fun(*a);
}
可以在fun中删除在main函数中分配并作为引用传递的内存和在fun中删除内存吗?这条路对吗?
不要这样做:
我猜这是一个米老鼠的例子,但在现实世界中:
- 首先,
int
可能不是由new
创建的-这里有很多问题 - 谁拥有正在讨论的对象。不是函数。合同在哪里?
请决定谁拥有一个对象。此外,如果"人"通过new
创建它,则应对delete
负责。
查看智能指针
简短的回答:是的,你可以。不要这样做。
引用是不可变的,也就是说,地址(如果编译器将引用实现为指针)是不可变的const。因此,如果您删除它,原始引用将指向未分配的内存,并将崩溃。
还要注意的是,从你的代码中,你传递了对数组的第一个(也是唯一的)元素的引用(如果有人认为指针是数组),但是fun不知道数组的大小,也不知道它是数组。例如:
fun(int &a)
{
delete &a;
}
main()
{
int a = 42;
fun(a);
}
它将尝试删除引用的地址。意想不到的行为。
相关文章:
- 返回常量对象引用 (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++中返回伪对象引用的规则