On 27 Okt., 22:10, Pete Becker <p...@versatilecoding.com> wrote:
On 2008-10-27 16:30:13 -0400, Juha Nieminen
<nos...@thanks.invalid> said:
One problem with copy constructors (if you have implemented one
explicitly) is that each time you add a new member variable to
your class, you have to remember to add it to the copy
constructor (and assignment operator). This is extremely easy to
forget.
Testing will catch that.
Well - i certainly hope so ;-)
If the member
variable is just eg. an int, then it the default copying would be
enough for it, so calling the compiler-generated copy constructor
would automatically copy it without having to do anything special
about it. (The user-written copy constructor could then simply
concentrate on the members which do need special copying.)
So the default copy constructor would only copy members that were
not copied by the user-written one? How could it know?
I agree - that would not be possible. But can I sidestep a little
and be off-topic for a second? I really like the idea of having a
copy- constructor being default being defined explicitly with the
new syntax, and now I wonder if there has been any proposal to
expand on the default stuff, notable for swap.
As the user-defined copy-constructor really is error-prone (I have
been bitten once or twice by forgetting the copying when adding a
new member to a class), I do my best to make sure that the default
constructor (and assignment-operator) works and normally restrict my
userdefined constructors to small classes with less than a handfull
of membervariables. But swap is another matter: I normally don't
write a swap function and live with the lost performance,
correcting the problem when e.g. I wind up with sorting large
arrays of those objects. But wouldn't it be nice if you could
write void swap(my_class& other) = default as well?
In other words: has there been any proposal to provide this
functionality in some later version of C++? I have skimmed the docs
but found nothing like that in C++0x. I do not know how general it
could be: having "= default" creating a function with standard
functionality for each member-variable (causing an error when that
functionality is not available) would be nice indeed.
No, I haven't seen anything like that either.
destruction of a temporary. That might improve things enough that you
need fewer specialized swaps.