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

C++特性之构造函数,析构函数和虚析构函数

1.构造函数

        一种特殊的成员函数,在创建对象时自动调用。常用于初始化成员。

示例

class MyClass {
public:MyClass() { // 默认构造函数data = 0;ptr = nullptr;}
private:int data;int* ptr;
};MyClass obj1; // 调用默认构造函数

2.析构函数

        一种特殊的成员函数,在对象被销毁时自动调用,常用于清理资源如开辟的空间等。

class MyClass {
public:~MyClass() { // 析构函数}
private:int data;int* ptr;
};int main(){MyClass m1;}//调用析构函数

核心思想:利用构造函数获取资源(内存、文件、网络连接等),利用析构函数释放资源。这就是著名的RAII(Resource Acquisition Is Initialization) 资源管理 idiom,是编写安全、无泄漏的C++代码的关键。

3.虚析构函数

        作用:确保通过基类指针删除派生类对象时,能够正确调用派生类的析构函数,从而避免资源泄漏。

示例

#include <iostream>class Base {
public:Base() { std::cout << "Base Constructor\n"; }virtual ~Base() { std::cout << "Base Destructor\n"; } // 现在是虚函数!
};class Derived : public Base {
public:Derived() { std::cout << "Derived Constructor\n"; }~Derived() override { std::cout << "Derived Destructor\n"; } // 最好加上override
};int main() {Base* ptr = new Derived();delete ptr; // 现在会发生什么?return 0;
}
Base Constructor
Derived Constructor
Derived Destructor  // 派生类析构函数被调用
Base Destructor     // 基类析构函数被调用

结果:所有资源都被正确释放,没有任何泄漏。

核心要点如果你设计的一个类打算被继承并通过基类指针使用,那么给它一个虚析构函数。这是一个简单但至关重要的规则,可以避免许多难以调试的内存和资源泄漏问题。

http://www.dtcms.com/a/392873.html

相关文章:

  • 走进Linux的世界:gdb的使用
  • SCADE One vs Scade 6 - CNN池化层建模对比
  • uniapp | u-waterfall实现瀑布流商品列表(支持筛选查询)
  • C++优选算法精选100道编程题(附有图解和源码)
  • 五分钟系列-nm工具
  • 【龙泽科技】新能源汽车空调系统结构原理仿真教学软件
  • 设计一个图片上传服务,支持每秒5000张图片上传,并且要实时生成多种尺寸的缩略图。你觉得架构设计的要点有哪些?
  • NLP:Transformer优势详解
  • 基于SpringBoot+Vue的民宿管理系统(WebSocket及时通讯、腾讯地图API、支付宝沙盒支付、ECharts图形化分析)
  • Git版本管理工具入门及常用命令讲解---小白版
  • 芯脉:面向高速接口的SoC架构与完整性设计<2-2>
  • Go基础:Go语言流程控制详解
  • 【硬件-笔试面试题-103】硬件/电子工程师,笔试面试题(知识点:项目当中无人机的控制是怎么实现的)
  • 融智学的信息科学与智能科学(信智科学)基础研究
  • PyTorch 容器类详解:nn.Sequential、nn.ModuleList 与 nn.ModuleDict
  • 基于规则的专家系统对自然语言处理深层语义分析的影响与启示综合研究报告
  • 微服务配置管理
  • WinDivert学习文档之五-————编程API(七)
  • 【StarRocks】-- 异步物化视图实战
  • 应用随机过程(一)
  • 【项目实战 Day4】springboot + vue 苍穹外卖系统(套餐模块 完结)
  • 素材库网站分享
  • 第8节-PostgreSQL数据类型-Text
  • React-router和Vue-router底层实现原理
  • 宝藏音乐下载站,免费好用
  • pygame AI snake 大乱斗
  • TCP FIN,TCP RST
  • 睡眠PSG统一数据集的设计思路
  • 告别Vibe Coding!敏捷AI驱动开发:用AI高效构建可维护的复杂项目
  • EA-LSS:边缘感知 Lift-splat-shot 框架用于三维鸟瞰视角目标检测