文档章节

C++ 构造和析构的顺序

bizliker
 bizliker
发布于 2017/08/28 14:48
字数 237
阅读 1
收藏 0

直接用代码说明问题:

#include <iostream>
using namespace std;

class A {
public:
  A(int a = 0) : _a(a) { cout << "Constructor A!" << _a << endl; }
  ~A() { cout << "Destrucotr A!" << _a << endl; }

private:
  int _a;
};

class B : public A {
public:
  B(int a = 0, int b = 0) : A(a), _b(b) {
    cout << "Constructor B!" << _b << endl;
  }
  ~B() { cout << "Destrucotr B!" << _b << endl; }

private:
  int _b;
};

class D {
public:
  D(int d = 0) : _d(d) { cout << "Constructor D!" << _d << endl; }
  ~D() { cout << "Destrucotr D!" << _d << endl; }

private:
  int _d;
};
class C : public B, public D {
public:
  C(int a = 0, int b = 0, int c = 0, int d = 0) : B(a, b), D(d), _c(c) {
    cout << "Constructor C!" << _c << endl;
  }
  ~C() { cout << "Destrucotr C!" << _c << endl; }

private:
  int _c;
};
int _tmain(int argc, _TCHAR *argv[]) {
  B a(6), b(7, 8);
  C c(1, 2, 3), d(12, 13, 14, 15);
  return 0;
}

// OUtput:
// Constructor A!6// Constructor B!0// Constructor A!7// Constructor
// B!8// Constructor A!1// Constructor B!2// Constructor D!0// Constructor C!3//
// Constructor A!12// Constructor B!13// Constructor D!15// Constructor C!14//
// Destrucotr C!14// Destrucotr D!15// Destrucotr B!13// Destrucotr A!12//
// Destrucotr C!3// Destrucotr D!0// Destrucotr B!2// Destrucotr A!1//
// Destrucotr B!8// Destrucotr A!7// Destrucotr B!0// Destrucotr A!6

© 著作权归作者所有

共有 人打赏支持
上一篇: WS_FAQ
下一篇: WS_FAQ
bizliker
粉丝 0
博文 2
码字总数 1064
作品 0
广州
私信 提问
C++基础教程之构造函数与析构函数

构造函数 当我们需要在对象创建时初始化一些数据的时候,我们不可能提供一个普通的成员方法供程序猿在对象创建后调用。因为如果程序猿故意或者无意间忘记了调用该方法,就可能导致程序出现偏...

这个人很懒什么都没留下
09/08
0
0
[C++再学习系列] 全局或静态变量(对象)的初始化

  对于C语言的全局和静态变量,不管是否被初始化,其内存空间都是全局的;如果初始化,那么初始化发生在任何代码执行之前,属于编译期初始化。由于内置变量无须资源释放操作,仅需要回收内...

技术小美
2017/11/05
0
0
绕开“陷阱“,阿里专家带你深入理解C++对象模型的特殊之处

摘要:本文介绍了C++对象模型的特殊之处,包括与C兼容的朴素模型,以及能支持多态的虚表模型,同时还带大家了解了构造函数与析构函数相关的一些特性与陷阱。这些内容能够帮助大家更好地学习和...

nirvanalucky
04/25
0
0
malloc和new有什么区别

malloc和new有以下不同: new、delete是操作符,可以重载,只能在c++中使用。 malloc、free是函数,可以覆盖,c、c++中都可以使用。 new可以调用对象的构造函数,对应的delete调用相应的析构...

夏雪冬日
2012/12/11
0
0
Singleton之C++部分一

采用静态或者全局变量的实现方案 由于C++不能保证静态或者全局对象的构造函数的调用顺序以及析构顺序。所以如果程序中有多个用此方法实现的Singleton类,它们之间又有某种构造依赖关系和析构...

长平狐
2012/08/28
131
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql 时间格式化

DATE_FORMAT

1713716445
8分钟前
0
0
聊聊flink的PartitionableListState

序 本文主要研究一下flink的PartitionableListState PartitionableListState flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/DefaultOperatorStateBackend.java /*......

go4it
13分钟前
0
0
Micropython教程之TPYBoard开发板制作电子时钟(萝卜学科编程教育)

1.实验目的 1. 学习在PC机系统中扩展简单I/O?接口的方法。 2. 什么是SPI接口。 3. 学习TPYBoard I2C接口的用法。 4. 学习LCD5110接线方法。 5. 设定时钟并将当前时间显示在LCD5110上。 2.所需...

bodasisiter
13分钟前
0
0
js 闭包

闭包,是 Javascript 比较重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是 ECMAScript 规范给的定义,如果没有实战经验,很难从定义去理解它。因此,本文不会对闭包的概念...

MrBoyce
18分钟前
0
0
Java B2B2C o2o多用户商城 springcloud架-企业云架构common-service代码结构分析

当前的分布式微服务云架构平台使用Maven构建,所以common-service的通用服务按照maven构建独立的系统服务,结构如下: particle-commonservice: spring cloud 系统服务根项目,所有服务项目...

itcloud
23分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部