2016-11-11 97 views
3

我的代码如下我们可以删除通过引用传递的对象吗?

fun(int &a) 
{ 
    delete &a; 
} 

main() 
{ 
    int *a = new int(10); 
    fun(*a); 
} 

我可以删除内存分配中的主要功能和通过有趣的参考和乐趣删除内存中传递? 这是正确的方式吗?

+0

这是没有'C' .... –

+0

是其正确的...你没尝试过吗? –

+0

我试过了,它正在工作。但我从来没有见过像这样删除对象,所以有dobt。 –

回答

2

简答: 是的,你可以。 不要这样做。

引用是不可变的,即地址(如果编译器将引用实现为指针)是不可变的const。所以,如果你删除它,原始引用将指向未分配的内存并将崩溃。

此外,请注意,从您的代码中传递对数组的第一个(和唯一)元素的引用(如果有人认为指针是数组),但有趣的是不知道数组的大小而不是事件是一个数组。例如:

fun(int &a) 
{ 
    delete &a; 
} 

main() 
{ 
    int a = 42; 
    fun(a); 
} 

它会尝试删除引用的地址。意外的行为。

+4

“另外,请注意,从您的代码中传递对数组第一个元素的引用” - 不,OP没有这样做。除此之外,这个答案是一句无法解释的答案,两段评论。评注不错(如果编辑是正确的),但你也可能想解释你的答案。 – hvd

2

不要这样做:

我想这是一个米奇鼠标的例子,但在现实世界中:

  1. 一开始有问题的int可能不被new创建 - 这是很多问题
  2. 谁拥有问题的对象。不是功能。合同在哪里?

请确定谁拥有一个对象。另外如果“人”通过new创建它应该对delete负责。

退房智能指针

相关问题