在C ++中通过引用传递指针的原因?
在哪种情况下你想在c ++中使用这种性质的代码?
void foo(type *&in) {...}
void fii() {
type *choochoo;
...
foo(choochoo);
}
如果您需要修改指针而不是指针指向的对象,您可能希望通过引用传递指针。
这与使用双指针的原因相似; 使用对指针的引用比使用指针更安全。
50%的C ++程序员喜欢在删除后将它们的指针设置为null:
template<typename T>
void moronic_delete(T*& p)
{
delete p;
p = nullptr;
}
没有参考,你只会改变指针的本地副本,而不会影响调用者。
大卫的回答是正确的,但如果它仍然有点抽象,这里有两个例子:
您可能希望将所有已释放的指针归零,以便更早地捕获内存问题。 你会做的C风格:
void freeAndZero(void** ptr)
{
free(*ptr);
*ptr = 0;
}
void* ptr = malloc(...);
...
freeAndZero(&ptr);
在C ++中也可以这样做:
template<class T> void freeAndZero(T* &ptr)
{
delete ptr;
ptr = 0;
}
int* ptr = new int;
...
freeAndZero(ptr);
处理链表时 - 通常简单地表示为指向下一个节点的指针:
struct Node
{
value_t value;
Node* next;
};
在这种情况下,当您插入空列表时,您必须更改传入的指针,因为结果不再是NULL
指针。 这是你从一个函数修改一个外部指针的情况,所以它会在它的签名中引用一个指针:
void insert(Node* &list)
{
...
if(!list) list = new Node(...);
...
}
这个问题中有一个例子。
链接地址: http://www.djcxy.com/p/40653.html