新闻详情

新闻详情

首页 / 资讯中心 / 详情

类和对象(上):一文讲透C++构造函数与析构函数:调用时机+常见坑+代码示例

发布时间:2026/11/5 1:26:58来源:尧图网络
类和对象(上):一文讲透C++构造函数与析构函数:调用时机+常见坑+代码示例
前言本篇以Date类和Stack类为例C为什么要引入构造函数和析构函数在C语言的结构体中如果需要初始化成员通常要自己编写一个初始化函数并在定义变量后手动调用它——这一步非常容易遗漏。C引入构造函数使得对象在创建时自动完成初始化无论对象如何定义全局、局部、动态分配构造函数都会被调用从而杜绝了忘记初始化的隐患。对于需要申请资源的类如动态内存、文件句柄等如果资源在对象存活期间被申请必须在对象销毁前释放否则会造成资源泄漏。C引入析构函数它在对象生命周期结束时自动被调用用来释放对象所拥有的资源无论资源是在构造函数还是其他成员函数中申请的。构造函数与析构函数共同支撑了资源获得即初始化机制大大提高了资源管理的安全性和便利性。构造函数的特点构造函数是特殊的成员函数在对象实例化时初始化对象。1.函数名与类名相同2.无返回值指的是真的没有返回值连void也没有3.构造函数可以重载对象在实例化时会调用对应的构造函数4.如果类中没有显式地定义了构造函数则编译器会自动生成一个没有参数的默认构造函数一旦你自己定义了一个构造函数则编译器不再生成5.默认构造函数不单单指编译器自动生成的构造函数还指我们自定义的无参构造函数和全缺省构造函数默认构造函数本质上就是指不传参数就可以被调用的构造函数class Date { public: Date(int year2026,int month5,int day18) { _yearyear; _monthmonth; _dayday; } private: int _year; int _month; int _day; }6. 对于同时包含内置类型和自定义类型成员的类如果我们不自定义任何构造函数由编译器自动生成的默认构造函数会对内置类型成员不进行初始化保留随机值除非成员有类内初始值对自定义类型成员调用它们各自的默认构造函数进行初始化。因此如果我们需要初始化内置类型成员或者希望类支持无参构造通常应该自定义构造函数并且建议同时提供默认构造函数例如typedef int STDataType; class Stack { public: Stack(int n 4) { //初始化 } //... private: STDataType* _a; size_t _capacity; size_t _top; }; // 两个Stack实现队列 class MyQueue { //... Stack pushst; Stack popst; }; int main() { MyQueue q;//编译器默认⽣成MyQueue的构造函数调⽤了Stack的构造完成了两个成员的初始化 return 0: }析构函数的特点1.析构函数名是在类名前加上字符~2.无参数无返回值与构造函数相似连void也没有3.一个类只能有一个析构函数与构造函数不同4.若用户未显式定义析构函数编译器会自动生成一个默认的析构函数在对象生命周期结束时系统会自动调用析构函数。5.对于包含自定义类型成员变量的类当对象被销毁时这些成员变量都会自动调用它们自己的析构函数——无论该类的析构函数是用户自定义的还是编译器默认生成的。6.如果类中有资源申请时一定要自定义一个析构函数否则会造成内存泄漏。7.一个局部域的多个对象C规定后定义的析构。例如class Date { Date(....) { //... } ~Date() { //... } } int main() { Date d1; Date d2; return 0 }main函数结束后调用构造函数和析构函数的顺序分别为d1、d2和d2、d1。总结构造函数与析构函数是C类管理对象生命周期和资源的核心工具。构造函数保证对象在创建时必然初始化杜绝了C语言中手动调用初始化函数容易遗漏的问题。析构函数保证对象在销毁时自动释放资源配合RAII思想从根本上避免资源泄漏一句话记住它们构造函数负责“得到”析构函数负责“归还”——C用对象的生与死自动管好每一份资源。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/4 15:56:54

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/4 22:55:41

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/4 17:01:23

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/4 12:33:12

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/4 1:25:31

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/4 3:51:11

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉