|
Boost : |
From: Thorsten Ottosen (thorsten.ottosen_at_[hidden])
Date: 2008-04-10 17:36:11
Frank Mori Hess skrev:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On Thursday 10 April 2008 16:02 pm, Thorsten Ottosen wrote:
>>> Your approach requires the T to be default constructible which is not
>>> always the case.
>> Why is this better than the far more expensive copy-construction?
>
> The documentation indicates optional<T> requires T to be copy constructible.
> It explicitly does not require T to be default constructible.
Well, not all operations requries T to be copy-constructible, just as
not all operations would require it to be default constructible.
>>> Besides, to my mind, the current implementation is more
>>> obvious for the user.
>> No user expects swap to throw or invalidate iterators or references like
>> the current implementation does.
>
> Personally, I consider any preservation of iterators/references/pointers to
> the internals of a swapped object to be purely a side-effect of a swap
> specialization, whose raise d'etre is as a speed optimization.
If speed is an issue, then the current implementation is also worse than
what i suggested:
copy construction + destruction
is *far more expensive* than
default construction + specialized swap + destruction
for non-trivial classes with heap-based memory. The latter typically
requires zero heap allocations.
-Thorsten
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk