C++一种有意思的构造析构函数调用现象

原创 2002年07月08日 09:52:00

// 2002/07/05
// awzzz

// 研究观察C++一种有意思的构造析构函数调用现象

// 现象
// 在构造函数A中调用重载的构造函数B
// 结论
// 在B被调用结束(A未结束)时已经有一次析构函数被调用

// 关注

// 测试平台
// 1.Win2K + VC6
// 2.Linux + gcc

/*
//程序运行输出
CTest(0, 0)
 ~CTest() m_CTestCount = 1
CTest(0)
 ~CTest() m_CTestCount = 2
CTest()
main()
 ~CTest() m_CTestCount = 3
//程序运行输出
*/

#include <stdio.h>

class CTest
{
public:
 CTest()
 {
  CTest(0);

  //已经调用析构函数

  printf("CTest()/r/n");
 }
 virtual ~CTest()
 {
  m_CTestCount++;
  printf(" ~CTest() m_CTestCount = %d/r/n", m_CTestCount);
 }
 CTest(int i)
 {
  CTest(i, 0);

  //已经调用析构函数

  printf("CTest(%d)/r/n", i);
 }
 CTest(int i, int j)
 {
  printf("CTest(%d, %d)/r/n", i, j);
 }
 static int m_CTestCount;
};

int CTest::m_CTestCount = 0;

int main()
{
 CTest cT;

 printf("main()/r/n");

 //调用析构函数

 return 0;
}

C++ 构造过程和析构过程

1、C++构造和析构的过程,类似于穿衣脱衣的过程。穿衣是:先穿内衣,再穿外套。脱衣是:先脱外套,再脱内衣。C++构造过程:首先调用父类构造方法,再调用子类构造方法。C++析构过程:首先调用子类析构方法...
  • qinhan728
  • qinhan728
  • 2015年11月13日 21:41
  • 703

进一步理解C++构造与析构

在之前的浅析C++智能指针一文中,我们提到过,在C语言中我们用malloc和free来申请和释放内存。而在C++语言中,我们常用new与delete来申请和释放内存。 我们要知道,new,delete...
  • u012999985
  • u012999985
  • 2016年01月19日 20:53
  • 700

深入理解C++类的构造函数与析构函数

在研究C++类的继承、派生、组合时,一直没有清晰地了解构造函数与析构函数的调用过程。本章通过点-线组合类,来深入分析组合类情况下,对象的构造与析构。 1.问题的引入 源代码: #include ...
  • shenziheng1
  • shenziheng1
  • 2016年07月13日 23:16
  • 1920

C++继承中构造函数、析构函数调用顺序及虚析构函数

C++继承中构造函数、析构函数调用顺序及虚析构函数 首先说说构造函数,大家都知道构造函数里就可以调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数...
  • u012861978
  • u012861978
  • 2016年02月16日 11:29
  • 1087

c++继承中析构函数的调用顺序

在继承中的析构函数主要遵从一下四点规则: 1、首先调用派生类的析构函数(清理派生类的新增成员) 2、如果派生类中有子对象 , 则再调用派生类中子对象的析构函数 , 调用顺序是:在派生类中,先定义后...
  • zengchenacmer
  • zengchenacmer
  • 2014年03月30日 16:28
  • 1909

C++构造函数和析构函数的总结

C++是面向对象的编程语言,在定义类的时候,离不开构造和析构函数。类中同类同名的成员函数称为构造函数,主函数中初始化一个对象时,如果有传入数据,其实是传入到构造函数的形参中。...
  • ladybai
  • ladybai
  • 2016年03月10日 14:51
  • 3192

C++对象的构造函数和析构函数详解

 C++对象的构造函数和析构函数详解 你好,C++(33)对象生死两茫茫 6.2.3 一个对象的生与死:构造函数和析构函数 6.2.2  使用类创建对象 完成某个类的声明并且定义其成员函...
  • mynote
  • mynote
  • 2015年03月18日 12:23
  • 1103

C++中成员变量 父类 子类构造析构顺序

c++中对象都是先构造成员变量,再调用自身的构造函数;故父类成员变量首先被构造,然后调用父类的构造函数,再构造子类的成员变量,最后调用子类的构造函数。 对象析构时与构造顺序相反,子类先调用自身的析构...
  • bama2488313716
  • bama2488313716
  • 2015年03月25日 18:46
  • 2230

C++类成员构造函数和析构函数顺序示例详细讲解

这篇文章主要介绍了C++类成员构造和析构顺序示例,看了这个例子大家就可以明白c++构造析构的奥秘 对象并不是突然建立起来的,创建对象必须时必须同时创建父类以及包含于其中的对象...
  • BickisyBinks
  • BickisyBinks
  • 2015年03月22日 09:58
  • 1804

C++学习笔记之——局部对象和临时对象的构造和析构时机

在写这篇文章之前,一直没有注意过C++中临时对象何时调用析构的。直到最近看代码的过程中遇到这种情况。 由于不了解临时对象何时调用析构函数,所以很不了解代码的实现。甚至还用局部对象的析构时机去看待。先讲...
  • huangjh2017
  • huangjh2017
  • 2017年04月19日 17:22
  • 415
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++一种有意思的构造析构函数调用现象
举报原因:
原因补充:

(最多只允许输入30个字)