1).一个对象以值传递的方式传入函数体
2).一个对象以值传递的方式从函数返回
3).一个对象需要通过另外一个对象进行初始化
例子如下
Point:: Point (const Point &);
默认的拷贝构造函数一般可以解决很多情况,但是如果要拷贝的对象里面有指针,
指向一块内存,拷贝的对象的指针也指向这个地方,然后拷贝的对象析构的时候,
会释放这块内存。
因此如果用户自定义对象里面有指针,需要自定义拷贝构造函数,
就能覆盖掉默认的拷贝构造函数,默认的拷贝构造是用位拷贝的方式实现的。
比如如下代码: #include
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;
}
这个程序运行的结果为:
construct
discontruct
discontruct
修改后的代码为: #include
using namespace std;
class CTest
{
public:
int i;
CTest(){cout << "construct" << endl;}
CTest(CTest& obj){cout << "call copy construct" << endl;} //拷贝构造函数
~CTest(){cout << "discontruct" << endl;}
};
void test(CTest obj)
{
}
int main()
{
CTest testObj;
test(testObj);
return 0;
}
此时程序的输出为:
construct
call copy construct
discontruct
discontruct