Re: Copy Constructors and Assignment Operator, When should I use?
"rockdale" wrote:
[...]
I simply assign set1 to set2 like this
set2 = set1;
will this assignment will copy whatever in set1 to set2? (deep
copy,
even the vector items?),
Yes, it will copy everything, provided that set items have proper
copy constructor. The `std::vector' container can copy itself
without a problem.
well my coworker told me that I need to have a define my own
copy
constructor for ItemSet, ItemListA and ItemListB for it works
properly. in the copy contructor of ItemSet,
ItemSet(ItemSet& toCopy){
//copy constructor
a = toCopy.a;
b = toCopy.b;
}
notice a and b are classes that I defined, to enable a =
toCopy.a
works properly. I need to define copy contructor in my ItemListA
and
ItelListB classes, basically, to manually the vector from the
toCopy,
is his statement true?
[...]
No. Either he misunderstood your design or plain wrong about copy
constructors.
struct ItemA{
int aInt;
std::string aString;
} ;
struct ItemB{
int bInt;
std::string bString;
time_t bTime;
} ;
Both `ItemA' and `ItemB' classes don't need explicit copy
constructor since compiler generated cctor is good enough. The
`std::string' container knows how to copy itself and other types
are just fine with language provided copy.
class ItemSet{
ItemListA a;
ItemListB b;
...
};
The `ItemSet' class doesn't need cctor either since all its
members know how to copy themselves.
class ItemListA{
std::vector <ItemA> m_vecA;
...
};
class ItemListB{
std::vector <ItemB> m_vecB;
...
};
Both `ItemListA' and `ItemListB' classes don't need explicit copy
constructor since their only memebr is `std::vector', which has
proper cctor.
HTH
Alex