On Mon, 23 Sep 2013, Paolo Carlini wrote:
Hi again,
It is funny that with fully dynamic strings, the copy constructor is
"better" than the move constructor: faster, doesn't throw, etc. I think we
should remove the move constructor in that case, or at least make it act
the same as the copy constructor. I didn't mark the copy constructor as
noexcept, but without checking the code it seems likely we could.
I took a look at the code. First I got a headache because of the allocator
stuff. And once the paracetamol started helping, I noticed that the
is_leaked mechanism means it can throw anyway, so I was wrong.
We could, but in my opinion fiddling with those isn't worth the trouble,
because the whole "fully dynamic string" thing is just a workaround for
issues of the current reference counted implementation vs the statically
allocated empty string on some targets.
Well, I have a second (practical) thought about this part. If you are willing
to spend a little more time on this, and can confirm your preliminary
analysis about copy-constructor vs move-constructor, first blush it
definitely makes sense to me, I'm certainly not against your proposal of
having the move-constructor identical to the copy-constructor in that case.
In 4.9.x some targets, not Linux, would benefit from it.
Sorry.
--
Marc Glisse