[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Newbie Questions

Geoff Herbynchuk wrote:

> And, if we do:
> bar_ptr = ptr_new(bar, /no_copy)
> bar_ptr will now just point to the memory location where bar is stored
> (not copy it to a heap location)?  We can then update the bar, or the
> components of bar(if bar is a structure) by dereferencing bar_ptr,
> right?

Wrong :(  With /no_copy, bar becomes undefined, because its value is
taken away and being attached directly to bar_ptr.

> For example:
> *bar_ptr.name = 'Geoff'

Caution, this would be (*bar_ptr).name, because bar_ptr is the pointer,
not bar_ptr.name.

> Thanks for everyone's help.  I've only worked with pointers in
> C/C++ before, and I'm getting the impression that these don't work
> exactly the same way.  =)

Correct. In C, they are real pointers to a memory location. In IDL, they
are just a heap variable. Tricks like p=&a, *p=5 to set a to 5 will not
work in IDL.
You can, however, set bar2_ptr = bar_ptr, and now at least these two
point to the same value, and *bar2_ptr = 0 also sets *bar_ptr to 0.

  Alex Schuster     Wonko@weird.cologne.de          PGP Key available