C++ 拷贝构造函数的调用
2008-10-22 19:20
309 查看
拷贝构造函数主要在以下三种情况下起初始化作用: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;
}
在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
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;
}
在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
相关文章推荐
- C++中拷贝构造函数的调用与C++返回值优化
- C++的拷贝构造函数的四种调用
- C++之拷贝构造函数的调用时机
- [互联网面试笔试汇总C/C++-22] 拷贝构造函数调用的时机-完美世界
- 1、C++关于拷贝构造函数和赋值运算符重载问题的测试程序。因为调用顺序不清,导致内存泄漏new delete
- c++ 拷贝构造函数调用时机
- C++愤恨者札记4——拷贝构造函数被调用的四种情形
- C++ 中拷贝构造函数被调用情况
- C++拷贝构造函数的调用时机,如没有重载等号操作符,需重写使用深拷贝
- c++怎样让返回对象的函数不调用拷贝构造函数
- C++学习笔记-----在重载的赋值运算函数中调用拷贝构造函数
- C++关于析构函数和拷贝构造函数何时调用两个例子的理解
- c++拷贝构造函数的调用时机
- C++拷贝构造函数 调用时机 -- 深浅拷贝
- 深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结
- 关于C++组合理解以及拷贝构造函数的调用时间的理解
- 【C++】String拷贝(包含深拷贝浅拷贝)以及拷贝构造函数中几种调用的情况
- C++ 拷贝构造函数和重载赋值操作符相互调用分析 [转]
- C++:拷贝构造函数在什么时候被调用?
- C++拷贝构造函数被调用的三种情况