C++类的数组中构造函数和析构函数的调用顺序(2)

对于如下的代码:

#include<iostream>
using namespace std; class CBase {
private:
static int count;
public: int id;
public:
CBase() {
id = CBase::count++;
cout << "CBase():Constructor:" <<id<< endl;
}
~CBase() {
cout << "CBase(): Destructor:" <<id<< endl;
}
};
int CBase::count = 0;//类的静态变量必须在类外以这样的方式进行初始化,否则会出现连接错误 class CDerive :public CBase {
public:
CDerive() {
cout << "CDerive():Constructor:" << id<<endl;
}
~CDerive() {
cout << "CDerive(): Destructor:" <<id<< endl;
}
}; int main(int argc, char* argv[])
{
CDerive p[3];
cout << "p[0].id=" << p[0].id << endl;
cout << "p[1].id=" << p[1].id << endl;
cout << "p[2].id=" << p[2].id << endl;
cout << "&p[0]=" << &p[0] << endl
<< "&p[1]=" << &p[1] << endl
<< "&p[2]=" << &p[2] << endl;
return 0;
//当函数退出时,栈中的类的实例会自动调用析构函数,我们通过此例来查看它们调用的顺序
}

运行结果如下:

S:\ComputerTech\VS2015\Release>Test.exe
CBase():Constructor:0
CDerive():Constructor:0
CBase():Constructor:1
CDerive():Constructor:1
CBase():Constructor:2
CDerive():Constructor:2
p[0].id=0
p[1].id=1
p[2].id=2
&p[0]=004AFCB4
&p[1]=004AFCB8
&p[2]=004AFCBC
CDerive(): Destructor:2
CBase(): Destructor:2
CDerive(): Destructor:1
CBase(): Destructor:1
CDerive(): Destructor:0
CBase(): Destructor:0

总结:

由上述的结果可以看出,构造函数的调用是以从数组的低地址变量向高地址变量的顺序进行的。当退出局部栈时,析构函数的调用是以从高地址变量向低地址变量的顺序进行的。

C++学习笔记(7)----类的数组中构造函数和析构函数的调用顺序的更多相关文章

  1. C++C++中构造函数与析构函数的调用顺序

    http://blog.csdn.net/xw13106209/article/details/6899370 1.参考文献 参考1: C++继承中构造函数.析构函数调用顺序及虚函数的动态绑定 参考2 ...

  2. C++中构造函数和析构函数的调用顺序

    一般而言,析构函数调用的顺序和构造函数调用顺序相反,但是,对象的存储类别可以改变调用析构函数的顺序.举例说明: CreateAndDestroy类的定义 CreateAndDestroy类的成员函数的 ...

  3. C++:派生类的构造函数和析构函数的调用顺序

    一.派生类 在C++编程中,我们在编写一个基类的派生类时,大致可以分为四步: • 吸收基类的成员:不论是数据成员还是函数成员,派生类吸收除基类的构造函数和析构函数之外的全部成员. • 改造基类函数:在 ...

  4. C++ Primer 学习笔记_54_类和数据抽象 --拷贝构造函数、赋值运算符

    拷贝控制 --复制构造函数.赋值操作符 引言: 当定义一个新类型时,须要显式或隐式地指定复制.赋值和撤销该类型的对象时会发生什么– 复制构造函数.赋值操作符和析构函数的作用!      复制构造函数: ...

  5. c++学习笔记4,派生类的构造函数与析构函数的调用顺序(一)

    測试源代码: //測试派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace ...

  6. php面向对象学习笔记01-面向对象介绍、构造函数、析构函数

    偶尔翻看以前的笔记.就整理下.方便以后的查阅 类-成员属性 成员属性是从某个事务提取出来的, 可以是基本数据类型,也可以是复合数据类型(数组,对象) //创建一个类 class Cat{ pubic ...

  7. leetcood学习笔记-26-删除排序数组中的重复项

    题目描述: 第一次提交: class Solution: def removeDuplicates(self, nums) -> int: for i in range(len(nums)-1, ...

  8. C++中多态中构造函数与析构函数的调用

    做个实验,看一下成员变量的构造析构,父类子类的构造析构,以及虚函数对调用的影响. #include <iostream> using namespace std; class Member ...

  9. Typescript 学习笔记四:回忆ES5 中的类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

随机推荐

  1. knova绘制矩形

    效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  2. .Net Core 使用NLog记录日志到文件和数据库

    NLog 记录日志是微软官方推荐使用. 接下来,通过配置日志记录到文件和Sql Server数据库. 第一步:首先添加包NLog.Config (可通过微软添加包命令Install-Package 包 ...

  3. VUE源代码调试方法

    前两条出自: https://link.zhihu.com/?target=http%3A//www.orzzone.com/vuejs-project-debug.html https://www. ...

  4. java内存的分配策略

    1.概述 本文是<深入理解java虚拟机>(周志明著)3.6节的笔记整理,文章结构也与书上相同,讲述的是几条最普遍的内存分配策略. 2.对象优先在Eden分配 ** 大多数情况下,对象在新 ...

  5. 总纲篇:产品结构设计指导VII(本博客指引章节)

    本章目的:搭建自己的产品结构设计知识体系与框架,从零开始设计一个完整产品. 需知远途即捷径! //作者的结构设计体系尚在搭建中,所有的文章都会定期进行一定编排修改 目录: 0)自序 1.基础篇 1)时 ...

  6. 题解 p2017 [USACO09DEC]晕牛Dizzy Cows

    前言:P大终于又更新了 正文 转送门 由于当时我这个ZZ不知怎么了,这份题解排版可能有些尴尬,建议大家读完题后,看我主程序前的代码的注释,然后看最下面的图片,然后看第一张图片,对不起,望多谅解 以样例 ...

  7. Jenkins 源代码编译

    最近一直想写一个关于 Jenkins 管理的 InelliJ 插件,但是尝试很多次总是在登录认证上面失败,各种办法都不起作用,而且官方的文档含糊不清,就动起了从源代码编译在开发环境中进行调试. 废话少 ...

  8. dubbo服务暴露过程

    所谓服务暴露最终做的事情:绑定网络端口,开启serversokect服务以接收外部请求 服务暴露时序图 本地暴露 远程暴露 整体总结 dubbo服务提供者暴露服务的主过程:首先 ServiceConf ...

  9. ES5支持的方法

    ES5的支持的方法 concat() 把元素衔接到数组中. every() 测试断言函数是否对每个数组元素都为真 filter() 返回满足断言函数的数组元素 forEach() 为数组的每一个元素调 ...

  10. CentOS和Ubuntu系统下安装 HttpFS (助推Hue部署搭建)

    不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...