Possible Duplicate:
Why copy constructor is not called in this case?
I have following code:
#include <iostream>
#include <new>
using namespace std;
class test {
int *p;
public:
test operator=(test a);
test() {
p = new int [2];
cout <<"Default Constructor was done here." << "\n";
}
test(const test &a) {
p = new int [2];
this->p[0] = a.p[0];
this->p[1] = a.p[1];
cout << "Copy Constructor was done here." << "\n";
}
~test() {
delete p;
cout << "Destructor was done here." << "\n";
}
int set (int a, int b) {
p[0] = a;
p[1] = b;
return 1;
}
int show () {
cout << p[0] << " " << p[1] << "\n";
return 2;
}
};
test test::operator=(test a) {
p[0] = a.p[0];
p[1] = a.p[1];
cout << "Operator = was done here" << "\n";
return *this;
}
test f(test x) {
x.set(100, 100);
return x;
}
int main () {
test first;
test second;
first.set(12, 12);
//f(first);
//second = first;
second = f(first);
first.show();
second.show();
getchar ();
return 0;
}
Copy Constructor was called only three times? Why? If I understand, we made four copies (we send object to func, func returns value, we send object to operator=, operator= returns value).