C++拷贝构造函数 调用时机 -- 深浅拷贝
2016-08-05 09:20
447 查看
http://blog.csdn.net/lwbeyond/article/details/6202256
拷贝函数调用时机
对象以值传递方式传入函数参数
对象以值传递方式从函数返回
对象需要通过另外一个对象进行初始化(注意与初始化后,=区别)
例题1
例题2
例子3
程序运行后的结果如下:
程序运行后的结果如下:
浅拷贝例题
sayHello退出的时候调用析构函数,delete p; 因为属于浅拷贝,所以参数中的b中的A * p与 main函数中的B b中的A * p 是一份内存。
函数自己退出时,调用析构函数 delete p;
main函数退出,调用析构函数 delete p;(重复delete,导致程序崩溃)
可以自定义拷贝构造函数,实现深拷贝
拷贝函数调用时机
对象以值传递方式传入函数参数
对象以值传递方式从函数返回
对象需要通过另外一个对象进行初始化(注意与初始化后,=区别)
例题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,导致程序崩溃)
可以自定义拷贝构造函数,实现深拷贝
相关文章推荐
- C++拷贝构造函数的调用时机,如没有重载等号操作符,需重写使用深拷贝
- 【C++】String拷贝(包含深拷贝浅拷贝)以及拷贝构造函数中几种调用的情况
- C++中拷贝构造函数和赋值函数被调用的时机
- C++构造函数、拷贝构造函数、赋值运算符重载 调用时机 GCC与VC在对象作为返回值的不同处理
- C++之拷贝构造函数的调用时机
- c++ 拷贝构造函数调用时机
- c++拷贝构造函数的调用时机
- c++之拷贝构造函数调用时机
- [互联网面试笔试汇总C/C++-22] 拷贝构造函数调用的时机-完美世界
- c++ 深浅拷贝
- C++入门系列 拷贝构造函数 拷贝赋值函数
- c++拷贝构造函数(深拷贝,浅拷贝)详解
- C++拷贝构造函数(包括默认拷贝构造函数以及深拷贝、浅拷贝)
- C++拷贝构造函数(深拷贝,浅拷贝)
- C++拷贝构造函数(深拷贝,浅拷贝)
- c++ 深浅拷贝(传统写法 xain'dai'xie'fa)
- C++ 了解C++默默编写并调用哪些函数(构造 析构 拷贝构造 拷贝赋值)
- C++拷贝构造函数(深拷贝,浅拷贝)
- C++拷贝构造函数(深拷贝、浅拷贝)
- C++拷贝构造函数(深拷贝,浅拷贝)