我的代码如下
fun(int &a)
{
delete &a;
}
main()
{
int *a = new int(10);
fun(*a);
}
我可以删除主功能中分配的内存,并通过引用传递给乐趣和删除内存吗? 这是正确的方式吗?
答案 0 :(得分:2)
简短回答: 是的你可以。 不要这样做。
引用是不可变的,即地址(如果编译器将引用实现为指针)是不可变的const。因此,如果删除它,原始引用将指向未分配的内存并将崩溃。
另外,请注意,从您的代码中您传递的是对数组的第一个(也是唯一的)元素的引用(如果将指针视为数组),但有趣的是不知道数组的大小而不是数组。例如:
fun(int &a)
{
delete &a;
}
main()
{
int a = 42;
fun(a);
}
它会尝试删除引用的地址。出乎意料的行为。
答案 1 :(得分:2)
不要这样做:
我想这是一个Mikey-mouse示例,但在现实世界中:
int
可能无法创建相关的new
- 这是一个很多问题请决定谁拥有一个对象。如果"人"通过new
创建它应该对delete
负责。
查看智能指针