![]() |
Boost : |
From: Daniel James (daniel_james_at_[hidden])
Date: 2007-12-10 11:19:34
On 10/12/2007, Thorsten Ottosen <thorsten.ottosen_at_[hidden]> wrote:
> Daniel James skrev:
> >
> > This implementation actually does provide the no throw guarantee. But
> > Jeremy Maitin-Shepard's version (on which it is based) didn't because
> > the iterators didn't store the bucket, and required the hash to be
> > calculated to work out which bucket the elements to be deleted are in.
> > Which I think the standard allows.
>
> Ok, I think you right the standard allows that. But this is also
> a bit irritating, because I cannot portable take advantage of your
> stronger guarantee. feThis again begs the question of how much the
> stronger guarantee affects performance?
I don't think it affects performance at all, I think if it was
required it would reduce the implementation choices. For example, if a
container could rehash without invalidating iterators then I think it
can currently do that when erase is called, but not if the stronger
guarantee is required and hash can throw.
Also, I made a mistake in the documentation, I said that a call to
Hash or Pred can throw. But re-reading the standard, it looks like it
doesn't have to be a call, it can be any member of the function
objects.
> yes, but my question was: *if an exception is thrown*, then what? I
> assume you give the basic guarantee?
Sorry, I misunderstood. This implementation gives the strong
guarantee, the standard gives the basic guarantee.
Daniel
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