我的代码如下
fun(int &a)
{
delete &a;
}
main()
{
int *a = new int(10);
fun(*a);
}
Run Code Online (Sandbox Code Playgroud)
我可以在fun中删除在主函数中分配并通过引用传递的内存,并在fun中删除内存吗?这是正确的方法吗?
简短回答:是的,可以。不要做。
引用是不可变的,也就是说,地址(如果编译器将引用实现为指针)是不可变的 const。因此,如果删除它,原始引用将指向未分配的内存并会崩溃。
另外,请注意,从您的代码中,您正在传递对数组的第一个(也是唯一的)元素的引用(如果将指针视为数组),但 fun 不知道数组的大小,而不知道数组的大小。例如:
fun(int &a)
{
delete &a;
}
main()
{
int a = 42;
fun(a);
}
Run Code Online (Sandbox Code Playgroud)
它将尝试删除引用的地址。意外的行为。
| 归档时间: |
|
| 查看次数: |
767 次 |
| 最近记录: |