Tim Partridge wrote:
> If I have an "add" method that adds a pointer to a foo to a private
> std::list, should I define add like
>
> 1. void add( const foo &f ) { lst.push_back( &f ); }
>
> to keep pointers out of my interface, or should I make it implicit that a
> pointer is being added to the list, like so
>
> 2. void add( foo *f ) { lst.push_back( f ); }
>
> Would the first method lead the user to believe that their foo is actually
> being stored, potentially leading to a bad memory value in the list once
> the foo is destroyed? Or is this discussion moot as long as I use pre and
> post conditions?
This is a technical question. The answer is to prefer weaker things to
stronger ones. Prefer references unless you need a pointer's extra features.
The only difference at an interface is the pointer could be NULL.
Can you push a NULL?
Another answer is symetry. The 'get' or 'pop' methods should, of course,
return the same type. Can they return a NULL, such as for a "not found"
situation?
Finally, you should avoid the implication that the list owns the object, or
that one can't enlist stack objects.
--
Phlip
http://www.c2.com/cgi/wiki?TestFirstUserInterfaces
>
> Tim Partridge
>