C++拷贝构造函数 调用时机 -- 深浅拷贝
来源:互联网 发布:萧山网络歌手 编辑:程序博客网 时间:2024/06/05 03:28
http://blog.csdn.net/lwbeyond/article/details/6202256
拷贝函数调用时机
- 对象以值传递方式传入函数参数
- 对象以值传递方式从函数返回
- 对象需要通过另外一个对象进行初始化(注意与初始化后,=区别)
例题1
class MyClass{public: MyClass(int i = 0) { cout << i; } MyClass(const MyClass &x) // 拷贝构造函数 { cout << 2; } MyClass &operator=(const MyClass &x) { cout << 3; return *this; } ~MyClass() { cout << 4; }};int main( ){ MyClass obj1(1), obj2(2); // MyClass obj3 = obj1; //调用拷贝构造函数 // 最终程序输出 122444 return 0;}
class MyClass{public: MyClass(int i = 0) { cout << i; } MyClass(const MyClass &x) // 拷贝构造函数 { cout << 2; } MyClass &operator=(const MyClass &x) { cout << 3; return *this; } ~MyClass() { cout << 4; }};int main( ){ MyClass obj1(1), obj2(2); // MyClass obj3; obj3 = obj1; //调用operator = // 最终程序输出 1203444 return 0;}
例题2
例子3
#include <iostream>using namespace std;int cnt = 1;class A{public: int a; A(){ cout << "A()"<< endl; } A(const A& u) // 拷贝构造函数 { cout << cnt++ << " " << "copy A()" << endl; }};A f(A u){ A v(u); A w = v; cout << "before return" << endl; return w;}int main(){ A x; cout << "begin" << endl; A y = f(x); cout << "end" << endl; return 0;}
程序运行后的结果如下:
#include <iostream>using namespace std;int cnt = 1;class A{public: int a; A(){ cout << "A()"<< endl; } A(const A& u) // 拷贝构造函数 { cout << cnt++ << " " << "copy A()" << endl; }};A f(A u){ cout << "before f" << endl; A v(u); A w = v; cout << "before return" << endl; return w;}int main(){ A x; cout << "begin" << endl; A y = f(f(x)); cout << "end" << endl; return 0;}
程序运行后的结果如下:
浅拷贝例题
sayHello退出的时候调用析构函数,delete p; 因为属于浅拷贝,所以参数中的b中的A * p与 main函数中的B b中的A * p 是一份内存。
函数自己退出时,调用析构函数 delete p;
main函数退出,调用析构函数 delete p;(重复delete,导致程序崩溃)
- 可以自定义拷贝构造函数,实现深拷贝
0 0
- C++拷贝构造函数 调用时机 -- 深浅拷贝
- 拷贝构造函数调用时机
- 拷贝构造函数调用的时机
- 拷贝构造函数被调用的时机
- c++拷贝构造函数的调用时机
- c++ 拷贝构造函数调用时机
- 拷贝构造函数被调用的时机
- 调用拷贝构造函数的时机
- 拷贝构造函数调用时机3
- 拷贝构造函数被调用的时机
- 拷贝构造函数3.调用时机
- 拷贝构造函数被调用的时机
- 拷贝构造函数的调用时机
- C++深浅拷贝构造函数
- C++:析构函数、对象生命周期、类型转换构造、拷贝构造、拷贝赋值、深浅拷贝
- 拷贝构造的调用时机
- [互联网面试笔试汇总C/C++-22] 拷贝构造函数调用的时机-完美世界
- 默认构造函数和拷贝构造函数(深浅拷贝)
- Android源码编译--jdk版本查询
- WebStorm 2016 最新安装指南 破解 汉化 字体设置
- MyBatis学习总结——Mybatis缓存
- 浅谈尾递归
- 整形自动拆包引起的NPE
- C++拷贝构造函数 调用时机 -- 深浅拷贝
- 高德地图API
- css中间固定宽度,两边自适应宽度
- linux之我见
- 等差数列的应用
- MFC 单文档、多文档和对话框程序
- ssh框架整合webservice
- osx中安装mysql数据库
- MyBatis学习总结——Mybatis3.x与Spring4.x整合