$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Noel Yap (Noel.Yap_at_[hidden])
Date: 2003-05-03 19:55:27
"Justin M. Lewis" wrote:
> > If you wrote the function, why did you write it taking in a pointer if
> > the intent is not an in/out parameter?
>
> Maybe you're in a place where you just had to work with pointers. It
> happens.
I still don't understand. Do you intend to rewrite the function
interface?
> > Can you explain or elaborate what you mean by "using pointers", please?
> >
>
> using pointers, it seems pretty self explanatory to me.
> myfunc(const obj *ptr);
>
> If you're not dealing with something where you know you have allocated data
> floating around, you should use a reference.
>
> myfunc(const obj &ptr);
Wouldn't this still be dynamically allocated memory:
obj* ptr = new obj();
myfunc( *ptr );
> But, like I said, there are cases where you have to allocate data. So, how
> do you differentiate calls like
>
> myfunc1(const obj *ptr)
>
> from
>
> myfunc2(obj *ptr) ?
By using:
void myfunc1( boost::dumb_ptr< obj const > ptr );
void myfunc2( boost::dumb_ptr< obj > ptr );
> I mean, if you just put dumb_ptr in place of both, how is it any different?
Because the type with which dumb_ptr is parameterized is different
thereby creating different types.
> How can you tell one from the other, without looking up the prototype?
Therefore:
boost::dumb_ptr< obj > in_out;
boost::dumb_ptr< obj const > in;
myfunc1( in_out ); // compiler error; if you want to pass in/out
parameters into in slots, there can be a conversion operator
myfunc2( in ); // compiler error
> I'm just saying, passing by pointer doesn't explicitly tell you anything,
> whereas, c_out and c_in_out do.
IMHO, it does. Like I said, they are just syntactic differences between
the two styles (except for the NULL situation).
Noel