Re: assignment operator implementation
Todd Gardner wrote:
Andrei Alexandrescu (See Website For Email) wrote:
Exception safety has a price, no doubt about it. The copy-and-swap idiom
is safe and elegant, but it must be understood that it comes with a
price tag.
Andrei
I think applying the label of costly to copy-and-swap is premature.
While it is wasteful in the particular instance of assigning a string
with less characters than the assigned-to string's allocation, as
Joshua Lehrer pointed out above, implementing the copy and swap as:
c& operator=(c tmp) {
swap(tmp);
return *this;
}
I have discussed this at length either in an article or in a newsgroup
post. Unfortunately I can't find where anymore :o(. The by-value
assignment signature---which yours truly has made popular, so I'm
unlikely to need much convincing :o)---is a good choice in a program
where you estimate there are many temporaries of type c; probably for a
string it would be a good choice. Going the conservative way could save
more if you have very few temporaries.
Unfortunately, you must make a guess and stick with it. This is because
a class can't easily detect how its right-hand side came about.
Fortunately the rvalue reference addition to the standard will solve
this elegantly.
Andrei
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]