Are there some drawbacks of such implementation of copy-constructor?
Foo::Foo(const Foo& i_foo)
{
*this = i_foo;
}
As I remember, it
Yes, that's a bad idea. All member variables of user-defined types will be initialized first, and then immediately overwritten.
That swap trick is this:
Foo& operator=(Foo rhs) // note the copying
{
rhs.swap(*this); //swap our internals with the copy of rhs
return *this;
} // rhs, now containing our old internals, will be deleted
You're looking for Scott Meyers' Effective C++ Item 12: Copy all parts of an object.
There are both potential drawbacks and potential gains from calling operator=()
in your constructor.
Your constructor will initialize all the member variables whether you specify values or not, and then operator=
will initialize them again. This increases execution complexity. You will need to make smart decisions about when this will create unacceptable behavior in your code.
Your constructor and operator=
become tightly coupled. Everything you need to do when instantiating your object will also be done when copying your object. Again, you have to be smart about determining if this is a problem.