拷贝构造函数主要在以下三种情况下起初始化作用:
在windows xp + VC 6.0的环境下,结果是:
Constructor //对应的是main函数中的 CopyClassTest one;
Copy Constructor//对应的是main函数中的 CopyClassTest two = one;
Copy Constructor//对应的是main函数中的 processCall(one); 函数调用要生成一个临时变量,所以调用了copy constructor
process call 1
process call 2
Constructor//对应的是 processCall2中的 CopyClassTest temp;
Copy Constructor//对应的是 processCall2中的 return temp;
在Linux localhost.localdomain 2.6.9-78.ELsmp #1 SMP Wed Jul 9 15:39:47 EDT 2008 i686 i686 i386 GNU/Linux + gcc version 3.4.6 20060404 (Red Hat 3.4.6-10)环境下,结果是:
Constructor
Copy Constructor
Copy Constructor
process call 1
process call 2
Constructor
1. 在声明语句中用一个对象初始化另一个对象;
2. 将一个对象作为参数按值调用方式传递给另一个对象时生成对象副本;
3. 生成一个临时对象作为函数的返回结果。(这种情况只有在windwos下是真的,我只是在windos xp + VC 6.0)
以下面的代码为例:
- // Tt.cpp : Defines the entry point for the console application.
- //
- #include <iostream.h>
- class CopyClassTest{
- public:
- CopyClassTest(){
- cout << "Constructor" << endl;
- }
- CopyClassTest(CopyClassTest const &a){
- cout << "Copy Constructor" << endl;
- }
- };
- void processCall(CopyClassTest a){
- cout << "process call 1" << endl;
- }
- CopyClassTest processCall2(){
- cout << "process call 2" << endl;
- CopyClassTest temp;
- return temp;
- }
- int main(){
- CopyClassTest one;
- CopyClassTest two = one;
- processCall(one);
- processCall2();
- return 0;
- }
Constructor //对应的是main函数中的 CopyClassTest one;
Copy Constructor//对应的是main函数中的 CopyClassTest two = one;
Copy Constructor//对应的是main函数中的 processCall(one); 函数调用要生成一个临时变量,所以调用了copy constructor
process call 1
process call 2
Constructor//对应的是 processCall2中的 CopyClassTest temp;
Copy Constructor//对应的是 processCall2中的 return temp;
在Linux localhost.localdomain 2.6.9-78.ELsmp #1 SMP Wed Jul 9 15:39:47 EDT 2008 i686 i686 i386 GNU/Linux + gcc version 3.4.6 20060404 (Red Hat 3.4.6-10)环境下,结果是:
Constructor
Copy Constructor
Copy Constructor
process call 1
process call 2
Constructor