文档章节

C++对象内存模型结构 - 单继承派生类对象内存结构

风从东方来
 风从东方来
发布于 09/12 01:52
字数 452
阅读 3
收藏 0

2. 单一继承派生类对象内存结构

2.1 普通C++对象单一继承内存结构

class CObject
{
private:
    int        mv1;
    long long  mv2;
    char       mv3;

public:
    int  GetValue1() const;
    void SetValue1(int val);
};

class CObjectA : public CObject
{
private:
	long long mv4;
	long long mv5;

public:
    long long  GetValue4() const;
    void SetValue4(long long val);
};

普通C++派生类对象内存结构

(1) 普通C++派生类对象内存结构中,仅包含父类和子类的成员变量。

(2) 成员变量在内存中按照先父类后子类的顺序逐个排列。

(3) 父类和子类对象指针,都指向该对象实例内存首地址。

2.2 带有虚函数的C++对象单一继承内存结构

class CObject2
{
private:
    private:
    int        mv1 {1};
    long long  mv2 {2};
    char       mv3 {3};

public:
    virtual ~CObject2();

    virtual long long GetValue2() const;
    virtual void SetValue2(long long val);
};

class CObject2A : public CObject2
{
public:
	long mv4 {4};
	long mv5 {5};
	
public:
	virtual long GetValue5() const { return mv5; }
};

带虚方法的C++派生类对象内存结构

(1) 对象结构顶部多出一个虚表指针,指向CObject2A虚表的第三个字段。虚标指针后面,各个字段按照先父类后子类的顺序逐个排列。

(2) CObject2A的虚表结构是对CObject2虚表的扩展,并在内容上兼容CObject2虚表。

(3) CObject2A的虚表从第三个字段开始,依次是虚构函数指针(D1Ev和D0Ev),后面是各个要方法按照先弗雷后子类的顺序逐个排列。

(4) delete操作时,会调用D0Ev的虚构函数。D0Ev0首先调用D1Ev,然后释放当前内存。

(5) D1Ev除了执行CObject2A的析构逻辑外,还会调用基类CObject2的D1Ev析构方法,实现递归析构。

© 著作权归作者所有

风从东方来
粉丝 5
博文 34
码字总数 17080
作品 0
杭州
高级程序员
私信 提问
绕开“陷阱“,阿里专家带你深入理解C++对象模型的特殊之处

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

nirvanalucky
2018/04/25
0
0
Crest的OO核心实现

至此,我们已经有了一个比较好用的宏封装的代码风格,一个基础的类对象结构的模拟代码,但是始终没有接触到OO的核心实现。这次,我们终于要进入实质的内容了---实现对象的继承和接口的实现。...

长平狐
2012/10/23
88
0
c++继承中的内存布局

今天在网上看到了一篇写得非常好的文章,是有关c++类继承内存布局的。看了之后获益良多,现在转在我自己的博客里面,作为以后复习之用。 ——谈VC++对象模型 (美)简.格雷 程化 译 译者前言...

长平狐
2012/10/08
5.7K
1
《鸡啄米C++编程入门系列》系列技术文章整理收藏

《鸡啄米C++编程入门系列》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201812.html 文章 鸡啄米:C++编程入门系列之前言 鸡啄米:C++编程入门系列之一(进制...

开元中国2015
2015/06/27
85
0
C++对象模型:单继承,多继承,虚继承

什么是对象模型 有两个概念可以解释C++对象模型: 语言中直接支持面向对象程序设计的部分。 对于各种支持的底层实现机制。 类中成员分类 数据成员分为静态和非静态,成员函数有静态非静态以及...

天王盖地虎626
02/28
13
0

没有更多内容

加载失败,请刷新页面

加载更多

还为PDF转Word抓狂?以下神器让你在职场倍受欢迎!

身在职场的你,是否一直在琢磨:如何能让自己在公司更受欢迎?如何才能在办公室里混个好人缘?如何在同事圈里留个好印象?其实,想要让自己成为受欢迎的人,只要让自己成为大家需要的人不就行...

foxit2world
26分钟前
7
0
AndServer+Service打造Android服务器实现so文件调用

so 文件调用 随着 Android 移动安全的高速发展,不管是为了执行效率还是程序的安全性等,关键代码下沉 native 层已成为基本操作。 native 层的开发就是通指的 JNI/NDK 开发,通过 JNI 可以实...

夜幕NightTeam
28分钟前
4
0
Docker下kafka学习三部曲之二:本地环境搭建

在上一章《 Docker下kafka学习,三部曲之一:极速体验kafka》中我们快速体验了kafka的消息分发和订阅功能,但是对环境搭建的印象仅仅是执行了几个命令和脚本,本章我们通过实战来学习如何编写...

程序员欣宸
28分钟前
4
0
萌新推荐!不再为Excel转换PDF发愁,Aspose.Cells for .NET一步到位!

Aspose.Cells for .NET(点击下载)是Excel电子表格编程API,可加快电子表格管理和处理任务,支持构建具有生成,修改,转换,呈现和打印电子表格功能的跨平台应用程序。 将Excel工作簿转换为...

mnrssj
29分钟前
6
0
对于绘画小白怎么画制服?该注意什么?

怎样制作学生服装?想必绘画初学者们常常会想的问题吧,不知道怎样才能画好人物的衣服,别着急,今日就在这儿讲一些关于如何绘画学生衣服校服的教程给我们!期望能够帮到你们! 轻便西装是不...

热爱画画的我
35分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部