文档章节

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

© 著作权归作者所有

共有 人打赏支持
bizliker
粉丝 0
博文 2
码字总数 1064
作品 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
消灭“脑细胞杀手”,阿里专家带你深入C++对象的生命周期管理

摘要:C/C++的指针一直是令人又爱又恨的特性。围绕指针产生了许许多多优雅的数据结构和系统实现,但又滋生了不少“脑细胞杀手”——内存Bug。C/C++指针问题(空指针、野指针、垂悬指针)的根...

萌萌怪兽
04/18
0
0
Effective C++笔记简易总结以及程序演示

4、确定对象被使用前已被初始化 在使用变量时不进行初始化是不好的行为,在程序中有可能读入一个未初始化的值就可能导致程序崩溃。 对于内置类型,保证在使用对象之前进行初始化: 对于结构体...

oldpan
2017/10/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

day58-20180816-流利阅读笔记-待学习

苹果市值破万亿,iPhone 会涨价吗? Lala 2018-08-16 1.今日导读 苹果教父乔布斯曾经说过:“活着就是为了改变世界。”虽然他在 56 岁时就遗憾离世,但他极具创新和变革的精神早已深埋进苹果...

aibinxiao
27分钟前
4
0
[雪峰磁针石博客]python3快速入门教程1 turtle绘图-2函数

菲波那契序列: >>> # Fibonacci series:... # the sum of two elements defines the next... a, b = 0, 1>>> while b < 10:... print(b)... a, b = b, a+b...112......

python测试开发人工智能安全
今天
0
0
java环境变量配置最正确的方式

原贴:https://blog.csdn.net/qq_40007997/article/details/79784711,十分详细,亲测有效

kitty1116
今天
0
0
49.Nginx防盗链 访问控制 解析php相关 代理服务器

12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置(502的问题) 12.16 Nginx代理 扩展 502问题汇总 http://ask.apelearn.com/question/9109 location优先级 http://blog....

王鑫linux
今天
2
0
Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部