Boost logo

Boost :

From: Gregory Dai (gregory.dai_at_[hidden])
Date: 2007-11-03 17:41:14


On 11/3/07, Emil Dotchevski <emil_at_[hidden]> wrote:
>
> > I don't think making file_entry is a lot of work. It's pretty simple and
> > straightforward. And once it's made, you keep it around in your arsenal.
>
> Not to split hairs here, but you could also write:
>
> boost::shared_ptr<FILE> open_file( char const * name, char const * mode )
> {
> if( FILE * f = fopen(name,mode) )
> return boost::shared_ptr<FILE>(f,fclose);
> else
> throw fopen_error(name,mode);
> }
>
> and keep that in your "arsenal".
>
> In fact, I think this function would be a good addition to boost so
> it's part of everyone's arsenal. :)

This free function looks pretty good, indeed. But again, file_sentry works
with not only shared_ptr, but auto_ptr or other *_ptr's as well. In reality
auto_ptr is lighter and has more applications than shared_ptr. That is,
there are in general more applications of auto_ptr<file_sentry> than of
shared_ptr<file_sentry>. Now we are talking about templatizing this function
and what not.

In another dimension, we have other C pointer types similar to FILE*. This
is harder to templatize than the type of *_ptr, due to differences in
functions such as fopen()/fclose(). In such cases, it seems ideal to have
separate thin wrappers to encapsulate the differences.


Boost list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk