RoR
RoR

Reputation: 16462

C++ Pointer (Pass By Reference) Question

A pointer that is passed-in-by-reference. Why? aren't pointers just references anyways? What's really happening to this parameter?

void someFunc(MyPtr*& Object)
{

}

Upvotes: 9

Views: 7975

Answers (7)

Karl Knechtel
Karl Knechtel

Reputation: 61478

Why?

For the same reason that you would pass in anything else by reference.

aren't pointers just references anyways?

Dear god, no. Not even remotely the same thing. Look, you can try to build a mental model of a reference by starting with a pointer, but by the time you've fixed up all the differences, you have a horrible illogical mess.

References are a much simpler and more intuitive concept, and there are only "historical reasons" for trying to understand pointers before them. Modern C++ uses raw pointers only rarely, and treats them as an implementation detail as much as possible.

A reference is another name for an already-existing thing. That's it. When used as a function parameter, they thus allow the called function to refer to the caller's data.

Upvotes: 1

wengseng
wengseng

Reputation: 1328

It enable you to:

void someFunc(MyPtr*& Object)
{
  //Modify what Object is pointing to
  Object=&old_Object;

  //You can also allocate memory, depending on your requirements
  Object=new MyPtr;

  //Modify the variable Object points to
  *Object=another_object;
}

Upvotes: 5

Schultz9999
Schultz9999

Reputation: 8916

You are not quite right. The pointer content is passed by reference but the pointer itself is still passed by value, i.e. reassinging it to some other pointer will not be reflected upon the exit from the method because the pointer will be set to point to the same memory block as before the call. Think of it as a simple int variable. However with &* or ** you can reassign the pointer and that will be visible outside the scope of this method.

Upvotes: 1

frast
frast

Reputation: 2740

The difference to passing just a pointer is that if the pointer is changed (Object = x) then this change will be seen by the calling function. You could achieve the same when you pass MyPtr** Object and dereference the pointer *Object = x;. With the second approach you could pass NULL to the function. This is not possible for references.

Upvotes: 1

trojanfoe
trojanfoe

Reputation: 122381

It also means the pointer can be 0 (NULL) which can having meaning to the method. A reference must always be valid and cannot be made 'nothing'

Upvotes: 0

shaunhusain
shaunhusain

Reputation: 19748

Other's will have to vote to verify this cause I'm a bit rusty on my C++ but I believe the idea here is you'd pass in a pointer by reference, that is instead of creating a new space to store the pointer itself you use a reference to the pointer so if you were to modify the pointer not just the value it would be modified after returning from the function, whereas otherwise all you could do is modify the value at position passed in. Hope that makes sense.

Upvotes: 1

LLS
LLS

Reputation: 2228

Simply speaking, it gives you the ability to change the pointer itself: it can be changed to point to another location in the function. And the change will be reflected outside.

Upvotes: 8

Related Questions