引用与传递函数指针的值,并使用删除指针链
问题描述:
比方说,我这样做:引用与传递函数指针的值,并使用删除指针链
void func (int* & refptr)
{
*refptr = 7;
}
int* ptr = new int;
func(ptr);
现在,如果我离开参考操作,也不会完全一样的事情在func中完成?无论哪种方式,你在堆中访问相同的int值,所以一种方式比另一种更可取?如果仅当您尝试更改指针所指向的位置时才使用引用运算符?我对此并不清楚,我的教授也没有帮助。 :(
我的其他问题与delete运算符做比方说,我有:
int** ptr = new int*;
ptr* = new int;
如果我想解除分配在堆中分配的所有内存,可能我只是在PTR使用删除一次或者我会删除PTR *然后PTR?
太谢谢你了。
答
通过引用传递指针没有任何好处,但它也没有伤害。当然,通过引用传递指针可以让你改变指针指向的位置,如果你想要的话。你可以用双指针完成同样的事情。
你的情况需要两次删除。这里的记忆将是什么样子你的电话后:
// Memory: free
int ** ptr = new int*;
// Memory: four bytes allocated for int*
ptr* = new int;
// Memory: four bytes allocated for int*, four bytes allocated for int
你需要一个删除分配的int四个字节,一个删除分配给INT *四个字节。
答
在你的第一个例子中,真的没有区别。参考文献用于修改和也避免了复制(这没有按”在指针的情况下真的很重要)
在第二个问题中,您没有正确的语法(*ptr
而不是ptr*
),但是,您必须单独删除阵列及其内容。
您可以使用标准模板库类型(shared_ptr
,unique_ptr
)删除容器时自动删除包含的对象。
+0
啊,谢谢你抓到语法错误。 – JamesGold
1000倍比我的教授更有帮助。谢谢! – JamesGold