Copy Constructor in C++
I have this code
#include <iostream>
using namespace std;
class Test{
public:
int a;
Test(int i=0):a(i){}
~Test(){
cout << a << endl;
}
Test(const Test &){
cout << "copy" << endl;
}
void operator=(const Test &){
cout << "=" << endl;
}
Test operator+(Te开发者_运维知识库st& p){
Test res(a+p.a);
return res;
}
};
int main (int argc, char const *argv[]){
Test t1(10), t2(20);
Test t3=t1+t2;
return 0;
}
Output:
30
20
10
Why isn't the copy constructor called here?
This is a special case called Return Value Optimization in which the compiler is allowed to optimize away temporaries.
I assume you're wondering about the line Test t3=t1+t2;
The compiler is allowed to optimize the copy construction away. See http://www.gotw.ca/gotw/001.htm.
As the others said, its just optimizing the call to the copy constructor, here what happens if you disable those optimizations.
barricada ~$ g++ -o test test.cpp -O0 -fno-elide-constructors
barricada ~$ ./test
copy
30
copy
134515065
-1217015820
20
10
精彩评论