A practice question on C++ primer:
class HasPtr
{
public:
HasPtr(const HasPtr& h) :ps(new string(*h.ps)), i(h.i) { cout << "Copy Constructor" << endl; }
HasPtr& operator=(const HasPtr& hp) {
ps = new string(*hp.ps);
i = hp.i;
cout << "Copy Assignment Constructor" << endl;
}
HasPtr(const string& s = string()) :ps(new string(s)), i(0) {};
private:
string* ps;
int i;
};
int main()
{
HasPtr p1;
HasPtr p2 = p1;
return 0;
}
Why is the copy constructor called instead of the copy assignment operator at p2=p1? When will the copy assignment operator be called?