【C++ 面试题】构造函数和析构函数你了解多少呢?

news2024/11/26 12:28:12

文章目录

      • 1. 什么是构造函数和析构函数
      • 2. 构造函数和析构函数可以是虚函数吗
      • 3. 构造函数有哪几种
      • 4. 深拷贝和浅拷贝的区别

1. 什么是构造函数和析构函数

🐧 构造函数
构造函数是在创建对象时自动调用的特殊成员函数

目的:初始化对象的成员变量,为对象分配资源,执行必要的初始化操作。

特点
①函数名与类名相同:构造函数的函数名必须与类名相同,且没有返回类型。、

②可以有多个构造函数,一个类可以有多个构造函数,它们可以根据参数类型和数量不同进行重载。

③默认构造函数:如果没有为类定义任何的构造函数,编译器会自动生成一个默认构造函数。默认构造函数没有参数,也可能执行一些默认的初始化操作。

在这里插入图片描述

🐧 析构函数
析构函数是在对象生命周期结束时自动调用的特殊成员函数。

目的:释放对象占用的资源,执行必要的清理操作。

特点
①函数名和类名相同,前面加上波浪号 ~

②析构函数没有参数,每个类只有一个析构函数,不能重载。

③默认析构函数:如果没有为类定义任何析构函数,编译器会自动生成一个默认析构函数,执行简单的清理操作。

在这里插入图片描述


2. 构造函数和析构函数可以是虚函数吗

  • 🍎析构函数可以是虚函数。当派生类对象中有内存需要回收时,如果析构函数不是虚函数,不会触发动态绑定,只会调用基类的析构函数,导致派生类资源无法正确释放,造成内存泄露。

  • ⚽构造函数不能声明为虚函数,因为虚函数机制依赖于虚函数表来实现运行时的多态性。构造函数是在对象的创建过程中被调用的,在对象的虚函数表未建立前,无法进行虚函数的调用,因此构造函数不能是虚函数。


3. 构造函数有哪几种

  • 🐧①默认构造函数
    没有任何参数的构造函数。如果用户没有为类定义构造函数,编译器会自动生成一个默认构造函数。默认构造函数用于创建对象时的初始化,当用户不提供初始化值时,编译器将调用默认构造函数。
    在这里插入图片描述

  • 🐧②带参的构造函数
    接受一个或多个参数,用于在创建对象时传递初始化值。可以定义多个带参数的构造函数,以支持不同的初始化方式。
    在这里插入图片描述

  • 🐧③拷贝构造函数
    用于通过已存在的对象创建一个新对象,新对象是原对象的副本。参数通常是对同类型对象的引用。
    在这里插入图片描述


4. 深拷贝和浅拷贝的区别

  • 🍎主要区别在于如何处理对象内部的动态分配的资源。

深拷贝
深拷贝是对对象的完全独立复制,包括对象内部动态分配的资源。在深拷贝中,不仅复制对象的值,还会复制对象所指向的堆上的数据。

特点:
🐧①复制对象及其所有成员变量的值;

🐧②动态分配的资源也会复制,新对象拥有自己的一份资源副本;

深拷贝通常涉及到手动分配内存,并在拷贝构造函数或赋值操作符中进行资源的复制。

在这里插入图片描述


浅拷贝
浅拷贝仅复制对象的值,而不涉及对象内部动态分配的资源。在浅拷贝中,新对象和原对象共享相同的资源,而不是复制一份新的资源。

特点
🐧①复制对象及其所有成员变量的值;
🐧②对象内部动态分配的资源不会被复制,新对象和原对象共享同一份资源;

浅拷⻉通常使⽤默认的拷⻉构造函数和赋值操作符,因为它们会逐成员地复制原对象的值
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2124673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Redis】主从复制 - 源码

因为主从复制的过程很复杂, 同时核心逻辑主要集中在 replication.c 这个文件中, 避免篇幅过大, 所以将主从复制中涉及这个文件的代码集中到了另一篇文章。 在当前文章主要分析主从复制的大体代码逻辑, 如果需要了解整体的过程, 可以配合 Redis 主从复制 - relication 源码分析 …

中非合作打开非洲14亿人的市场新空间,非洲电商平台有哪些?

中非合作论坛自2000年成立以来,中非贸易额从105亿美元增至2821亿美元,增长近26倍。中国对非投资也从4亿多美元增长至400多亿美元,增幅超过100倍。此次中非合作论坛开幕式上,中国更是宣布未来将为非洲提供约500亿美元的融资&#x…

水库大坝安全监测方案,双重守护,安全无忧

水库作为重要的水利设施,在防洪、灌溉及供水等方面发挥着重要作用。然而随着时间的推移,大坝面临着自然老化、设计标准不足及极端天气等多重挑战,其安全性与稳定性日益受到关注。水库堤坝险情导致的洪涝灾害给人民生命财产和经济社会发展带来…

运动耳机选哪种好用?六条绝妙选购要点避免踩坑

​开放式耳机目前非常流行,它们的设计不侵入耳道,长时间佩戴也不会感到不适,同时还能维护耳部卫生,这使得它们特别受到运动爱好者和耳机发烧友的喜爱。然而,市场上的开放式耳机品牌众多,质量参差不齐&#…

乡村振兴/乡村风貌 乡村建设改造方案设计

[若愚文化STUDIO] 乡村振兴/乡村建设/风貌改造/产业策划 深度参与GD省“百千万”工程, 助力乡村建设。 根据现状实景,充分保留主体建筑物,快速出改造意向图。

vue的学习之路(Vue中组件(component )

注意:其中添加div的意义就是让template标签有一个根标签 ,否则只展示“欢迎进入登录程序” 不加div效果图 (2)两种开发方式 第一种开发方式 //局部组件登录模板声明 let login { //具体局部组件名称 template:‘ 用户登录 ’…

网络安全工程师能赚多少钱一个月?

🤟 基于入门网络安全/黑客打造的:👉黑客&网络安全入门&进阶学习资源包 网络安全工程师的月薪取决于多种因素,包括他们的经验、技能、学历、所在地区和行业的需求等。因此,很难给出一个确切的数字作为所有网络安…

STM32的GPIO使用

一、使用流程 1.使用RCC开启GPIO时钟 2.使用GPIO_Init 函数初始化GPIO 3.使用输出或输入函数控制GPIO口 二、RCC的常用函数 函数内容可通过这两个文件进行查看: RCC常用函数如下: void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalS…

掌握Python自动化:探索keymousego库的无限可能!

文章目录 掌握Python自动化:探索keymousego库的无限可能!背景:为什么选择keymousego?简介:keymousego是什么?安装指南:如何安装keymousego?快速入门:5个简单函数的使用实…

Java中校验导入字段长度与数据库字段长度一致性

需求:使用EasyExcel导入数据时,根据数据库字段长度校验导入字段的长度。使用的数据库是mysql。若是一般的校验需求, Spring Validation 或 Hibernate Validator 即可满足。 实现步骤: 获取需要校验的表,查询出字段相…

【JAVA基础】实现Tomcat基本功能

文章目录 TCP/IP协议Socket编程ServletTomcat 在搜索了两三天之后,也是大概弄懂了Tomcat是个什么东西,我们在说Tomcat之前,先来了解一下下面这三个东西: TCP/IP协议 TCP/IP 是互联网通信的基础协议。TCP(传输控制协议…

C++类和对象3

一.初始化列表 我们之前的构造函数都是在函数体内对数据成员进行赋值 Date(int year, int month, int day) {_year year;_month month;_day day; } 然而我们的构造函数还有另一种初始化的方式:初始化列表 ——初始化列表是以参数表后冒号开始,用数…

数学建模笔记—— 多目标规划

数学建模笔记—— 多目标规划 多目标规划1. 模型原理1.1 多目标规划的一般形式1.2 多目标规划的解1.3 多目标规划的求解 2. 典型例题3. matlab代码实现 多目标规划 多目标规划是数学规划的一个分支。研究多于一个的目标函数在给定区域上的最优化。又称多目标最优化。通常记为 …

VCS(Video Cloud Storage)解决方案研究报告

1.背景 控视频是重要的数据资产和证据链,在银行、交通、司法等行业对视频数据有很高的安全等级。随着监控的重要性不断提升,在能源、电力、校园、厂矿、高星酒店等多场景中对监控存储也有更高要求,体现为海量存储、超长时间和数据安全。为了充…

得物APP助力释放首发经济新活力,解锁年轻潮流密码

在消费升级与高质量发展的时代背景下,我国首发经济正以前所未有的活力蓬勃发展,成为推动市场繁荣、满足个性化消费需求的重要力量。首发,即产品首次在市场亮相,往往代表着最新的设计理念、最尖端的科技应用以及最前沿的潮流趋势。…

C++入门知识(1)

一、namespace 1、用处 可以解决程序里面定义重名变量的问题 namespace是一个命名空间。 定义变量可以在4个域下面定义,全局域,局部域,命名空间域,类域。各个域之间是相互不影响的。命名空间里面的变量可以和外面的变量重名 2…

Stable Diffusion4.9一键安装教程SD(AI绘画软件)

**无套路!**文末提供下载方式 Stable Diffusion 是一款革命性的 AI 绘画生成工具,它通过潜在空间扩散模型,将图像生成过程转化为一个逐步去噪的“扩散”过程。 与传统的高维图像空间操作不同,Stable Diffusion 首先将图像压缩到…

样品管理的重要性与实操解决方案,外贸软件一键搞定

在外贸过程中,样品管理是一个重要的环节,它不仅涉及到产品的质量和细节确认,还是与客户沟通的重要桥梁。在选择客户时,通常会优先考虑那些目的明确、意向较强的客户,因为这些客户成交的可能性较大。无论是纺织品、服装…

基于SpringBoot+Vue的学生成绩管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的学生成绩…

Python语法,从入门到精通,一步到位!

Python语法及入门涵盖了多个方面,包括基本语法、数据类型、控制流、函数、模块等。以下是一个超全超详细的介绍: 一、Python基本语法 注释:Python中使用井号(#)表示注释,从井号开始到行尾的内容都会被Pytho…