当前位置: 首页 > news >正文

C++:构造函数是什么东西

一、构造函数是什么

在C++中,构造函数是一种特殊成员函数,它有一下几个明显的特征:

1、它自动在创建新对象时被调用。

2、其名称与类名相同

3、没有返回类型,

4、通常没有参数(除了默认情况下的隐式this指针)。

构造函数可以分为几种:

  • 无参构造函数:如果类中没有任何参数,那么就会有一个默认的构造函数。
  • 有参构造函数:用户可以在创建对象时传入特定的参数,用于个性化初始化。
  • 析构函数:尽管不是构造函数,但其与构造函数形成对应,会在对象生命周期结束时执行清理工作,但它通常不包含任何实际操作。

构造函数主要作用初始化新创建的对象设置它们的数据成员到合适的初始状态。当对象的生命期开始时,构造函数会被执行一次;当对象不再存在(如通过删除、局部变量超出作用域等)时,析构函数则会自动调用。

class MyClass {
public:MyClass() { // 构造函数,用于初始化数据成员value = 0;}private:int value;
};MyClass obj; // 当创建这个对象时,构造函数会被调用

二、析构函数是什么

在C++中,析构函数是一种特殊成员函数,它有如下特征:

1、它在对象生命周期结束时自动调用。

2、它的名称通常以~开头,

3、没有返回值类型,

4、默认是空的。

析构函数的主要作用是在对象即将被销毁(如从栈上弹出或从动态分配内存中释放时)时,执行一些清理工作,比如关闭打开的文件、删除资源或者释放动态内存。

析构函数不能显式调用,也不支持重载。当程序结束或者一个对象的所有引用都消失(包括隐藏的引用),系统会自动调用每个对象的析构函数。例如,如果你创建了一个自定义类的对象并拥有动态分配的内存,那么当你不再需要这个对象时,析构函数就会在delete操作后自动运行,确保释放先前申请的内存,防止内存泄漏。

class MyClass {
private:int* array;size_t size;public:// 构造函数MyClass(size_t capacity) : array(new int[capacity]), size(capacity) {}// 析构函数~MyClass() {delete[] array;  // 释放动态分配的内存}
};

在这个例子中,当我们创建MyClass对象并离开作用域时,析构函数会自动调用delete[] array,确保内存得到释放。如果没有析构函数,这些内存将无法妥善管理,可能会导致内存泄漏。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 科普文:构建可扩展的微服务架构设计方案
  • 强技能 展风采 促提升——北京市大兴区餐饮行业职工技能竞赛精彩呈现
  • C++与C#创建位图,是否需要区分RGB和BGR模式
  • 树型结构数据存储实践
  • 第32讲:K8S集群与Cephfs文件系统集成
  • Interpretability 与 Explainability 机器学习
  • 2024阿里国际春招笔试
  • 在Linux环境下搭建Redis服务结合内网穿透实现通过GUI工具远程管理数据库
  • ubuntu 网络常用命令
  • 类与对像(1)
  • 【vuejs】vue-router 之 addRoute 动态路由的应用总结
  • 【海贼王的数据航海】ST表——RMQ问题
  • 2025届秋招提前批信息汇总(计算机类)
  • 【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
  • 后端之路第三站(Mybatis)——XML文件操作sql
  • 2018一半小结一波
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Android框架之Volley
  • classpath对获取配置文件的影响
  • cookie和session
  • CSS相对定位
  • Elasticsearch 参考指南(升级前重新索引)
  • ERLANG 网工修炼笔记 ---- UDP
  • JavaScript-Array类型
  • node.js
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 构建二叉树进行数值数组的去重及优化
  • 和 || 运算
  • 简单实现一个textarea自适应高度
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端js -- this指向总结。
  • 前端路由实现-history
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 通过几道题目学习二叉搜索树
  • 我建了一个叫Hello World的项目
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​人工智能书单(数学基础篇)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (SERIES12)DM性能优化
  • (笔试题)合法字符串
  • (第二周)效能测试
  • (计算机网络)物理层
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一) 初入MySQL 【认识和部署】
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转) Face-Resources
  • .NET DataGridView数据绑定说明
  • .net 微服务 服务保护 自动重试 Polly
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • ;号自动换行
  • @EnableWebMvc介绍和使用详细demo
  • @JSONField或@JsonProperty注解使用