JPEG Thumbnailer
Thiago Macieira
thiago at kde.org
Tue Aug 19 23:05:42 BST 2008
Ingo Klöcker wrote:
>I know you will kill me for making the following suggestion. :-)
Yes, I will. Using boost is an major overkill for this. Much more than
QFile, because QFile is in a library already loaded, while boost will
require additional code being loaded.
>If QFile is too much overhead then I'd use a boost::shared_ptr with
>custom deleter [1], i.e.
>
> boost::shared_ptr<FILE> fd_in( fopen(path.toLatin1().data(), "rb"),
> fclose ); if ( fd_in.get() == NULL )
> return false;
>
>If you want to close the file explicitly then you call fd_in.reset().
>Otherwise you don't have to do anything.
>
>Reasons for doing the above:
>a) We are coding in C++, right? So let's use the power C++ provides. It
>makes no sense to write error prone code, if there's a way to avoid it.
Uh... std::fstream?
>b) Using boost::shared_ptr is just a compile time dependency.
Right, but it'll bring in all of boost's atomic reference counting code
along. Also remember that some compilers are brain-dead and will
instantiate the entire class, as opposed to just the parts of it that you
actually use.
Not to mention that a custom deleter would have to be written.
What you really want here is std::auto_ptr with a custom deleter. There is
no shared pointer in this circumstance, so no need to add the overhead
associated with that,
>c) Several KDE packages (kdepimlibs, kdepim) do already have a
>dependency on boost.
Sometimes unwarranted. There's a lot of boost that has equivalents in Qt,
including shared_ptr/intrusive_ptr (Qt 4.5's QSharedPointer for both).
But there are nice things in it too.
Also, there's a very, very simple way of making sure there are
no "returns" where you forgot to close the file: create a different
function.
FILE *f = fopen(...);
bool result = doTheWork(f);
fclose(f);
return result;
Remember: the only reason QFile was mentioned in this thread wasn't
because of "forgetting to close". It was to encode the name properly from
QString to the 8-bit format.
--
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
PGP/GPG: 0x6EF45358; fingerprint:
E067 918B B660 DBD1 105C 966C 33F5 F005 6EF4 5358
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20080820/75f3aebc/attachment.sig>
More information about the kde-core-devel
mailing list