首页 > 编程语言 > 详细

C++构造函数、复制函数、析构函数调用详解

时间:2021-02-18 15:08:15      阅读:19      评论:0      收藏:0      [点我收藏+]
 1 #include <iostream>
 2 using namespace std;
 3 class Demo {
 4 public:
 5     Demo() { cout << "consructor" << endl; };
 6     ~Demo() { cout << "destructor" << endl; }
 7     Demo(Demo& obj) { cout << "copy" << endl; }
 8 };
 9 void Func(Demo obj) {
10     cout << "func" << endl;
11 }
12 Demo d1;
13 Demo Test() {
14     cout << "test" << endl;
15     return d1;
16 }
17 int main() {
18     Demo d2;
19     Func(d2);
20     Test();
21     cout << "after test" << endl;
22     return 0;
23 }

运行结果:

consructor
consructor
copy
func
destructor
test
copy
destructor
after test
destructor
destructor

 

调用步骤:

输出结果   具体跳转执行行数   操作
consructor row 12 -> row 5 创建Demo类对象d1
consructor row 18 -> row 5 创建Demo类对象d2
copy   row 7   -> row 7 d2作为参数被Func调用,执行复制函数将d2复制给obj
func row 10 进入Func函数
destructor row 19 -> row 6

销毁Demo类对象obj,其由Func(d2)创建

注意:删除的是临时对象obj而不是d2

test row 14 进入Test函数
copy row 20 -> row 7 d1作为返回值被Test调用执行复制函数
destructor row 20 -> row 6 销毁Demo类对象obj,其由Test()创建
after test row 21  
destructor row 12 -> row 6 销毁Demo类对象d1,其由row 12创建
destructor row 18 -> row 6 销毁Demo类对象d2,其由row 18创建

 事实证明关键之处还是在于复制函数的调用时机:

  • 1.使用一个已经创建完毕的对象来初始化一个新对象
  • 2.值传递的方式给函数参数传值
  • 3.以值方式返回局部对象
    只有深入理解了构造函数、析构函数、复制函数的调用时机,我们才能更好地把控程序的运行机制。

C++构造函数、复制函数、析构函数调用详解

原文:https://www.cnblogs.com/Rebel3/p/14411361.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!