The application of copy constructors is made up of the following aspects:
The 1 function argument is an object and is a value-passing method
The return value of the 2 function is an object and is a value-passing method
3 initializes another object with an object
Thus, when a function's argument or return value is an object, the be careful when using, because a bit copy is performed when the value is passed, and the object's constructor is not invoked, which means that the generated temporary object may not be properly initialized, which may result in some problems that are not intended. The same is true when the return value is an object and another object is initialized with an object.
For example, the following code:
#include <iostream>
using namespace std;
class CTest
{
public:
int i;
CTest(){cout << "construct" << endl;}
~CTest(){cout << "discontruct" << endl;}
};
void test(CTest obj)
{
}
int main()
{
CTest testObj;
test(testObj);
return 0;
}
The result of this program running is:
Construct
Discontruct
Discontruct