I have a class which does not have copy constructor or operator= overloaded.
The code is pretty big but the issue is around this pseudo-code:
ClassA object1(x,y);
object1.add(z)
myVector.push_back(object1);
//Now when I retrieve from myVector and do add it
// apparently creates another object
myVector.at(index).add(z1);
Like I said it is pseudo-code. I hope it make sense to experts out there!
So, ClassA looks like this (of course not all data members included)
Class ClassA {
private:
int x;
string y;
ClassB b;
vector<int> i;
public:
int z;
}
Since ClassB b is a new data member for this release, is the need of copy constructor now become a must?
Thanks again all of you for responding.
Class ClassB {
private:
vector<ClassC*> c;
Class D
}
Class ClassC {
private:
vector<ClassE*> e;
}
Class ClassD{
private:
vector<ClassF*> f;
}
Then ClassE and ClassF have basic types like int and string.
The new object isn’t being created when you retrieve the object using
at();at()returns a reference to it. The new object is beingcreated when you do the
push_back(). And if you don’t have anaccessible copy constructor or assignment operator, you can’t put the
object into a vector; officially, it’s undefined behavior, but at least
if you use the vector (as you’ve done here), it will in fact not
compile. Most likely you’re getting the compiler generated defaults.
Without seeing the actual object type, it’s impossible for us to say
whether they’re appropriate; if the object type only contains basic
types and types from the standard library (other than the iostream stuff
and
auto_ptr—and the threading stuff if you’re using C++11),then the compiler generated copy constructor and assignment should be
OK. If the class contains pointers to memory you allocate in the
constructor, it almost certainly isn’t.