在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

    上一篇: Reason to Pass a Pointer by Reference in C++?

    下一篇: Passing a 2D array to a C++ function