深入探索C++对象象模型--拷贝构造函数、对象模型

本文探讨了拷贝构造函数的默认行为及其在特定情况下的局限性,特别是在多态对象复制、函数参数及返回值处理时的问题。此外,还讨论了在多重继承和虚拟继承场景下虚函数表的内存布局差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

拷贝构造函数

如果没有定义拷贝构造函数,那么编译器会自动生成一个拷贝构造函数,但是这个拷贝构造函数是有一定限度的。

一般来说这个拷贝构造函数是按照位直接拷贝的,但是在有些情况下这种初始化是有问题的,在特殊的四种情况下是有问题的,在有问题的情况下,可以举例说明。

如果一个有多态性质的对象,子类赋值给父类,调用了拷贝构造函数,这个时候就需要给父类的虚拟函数表重新分配,使得虚拟函数表和子类不是同一个,这样bitwist就不能有效

 

对于在函数参数中调用拷贝构造函数,参数是实参的一根拷贝,对于函数的返回值调用了拷贝构造函数,编译器的做法是在函数参数中多可添加一个参数,这个参数是返回值的引用,在函数有返回值的时候,直接修改这个函数中多一个的参数即可,因为这个参数正好是函数返回值的引用。这也是编译器做的一个优化

 

在何种情况必须使用成员初始化列表来初始化成员:

1、  当初始化一个引用成员时

2、  当初始化一个const成员时

3、  当调用一个baseclass的构造函数,而它拥有一组参数时

4、  当调用一个成员对象的构造函数时,而它拥有一组参数时。

 

同时,初始化列表中初始化对象的顺序由class中的成员声明次序决定,不是初始化列表中的排列次序决定的。

 

Iorigin.x = 0;

Pt->x = 0;

从origin存取和从pt存取有什么重大的差异?当origin是一个derived class,而在其继承结构体中有一个virtual base class,并且被存取的成员是一个从该virtual base class继承而来的成员是,就会有重大的差异

 

多重继承和虚拟继承下虚函数表对应的内存分布(VS2008)

在多重继承下:

子类和第一个父类公用一个虚函数表指针,然后剩下的父类各自有各自的虚函数表指针,最后所得虚函数表指针和多重继承下父类的个数一样。

这个时候需要明白一个事情,如果在多重继承情况的父类也继承了共同的父类,那么这个时候在子类中会有两个父类的父类。

 

正是在这种情况下出现了虚拟继承,能够让父类的父类在子类中出现一次。怎么理解这个情况呢?什么是父类的父类呢?比如子类继承了两个父类,但是这两个父类也继承了同一个父类,这就是父类的父类,这个时候如果使用多重继承,就出现父类的父类出现两次的情况。这样也引出了虚拟继承。

 

在虚拟继承的情况下,有多少个父类就有多少个虚拟函数表指针,但是对于父类继承的同一个父类只出现一次,这个时候会有一个虚基类指针。假设一个子类多重继承了两个父类,这两个父类同时继承了同一个父类,这么一来,总共是四个类,最后的子类中有三个指针,两个是虚函数表指针,一个是虚基类指针

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值