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

C++学习笔记——初始化列表、创建和实例化对象、new 关键字、隐式构造与 explicit 关键字、运算符与运算符重载

目录1. 初始化列表1.1 基本语法1.2 为什么使用初始化列表1.3 初始化顺序2. 创建和实例化对象2.1 栈上分配自动存储期2.2 堆上分配动态存储期2.3 栈 vs 堆Cherno 的建议3. new 关键字3.1 new 的作用3.2 new 与 malloc 的区别3.3 数组形式的 new 与 delete3.4 定位 newplacement new4. 隐式构造与 explicit 关键字4.1 隐式构造隐式类型转换4.2 explicit 关键字5. 运算符与运算符重载5.1 基本概念5.2 成员函数 vs 全局函数5.3 常用运算符重载示例1. 初始化列表1.1 基本语法初始化列表位于构造函数参数列表之后、函数体之前以冒号:开头多个成员用逗号分隔。class Entity { private: std::string m_Name; int m_Age; public: Entity(const std::string name, int age) : m_Name(name), m_Age(age) // 初始化列表 { // 构造函数体 } };1.2 为什么使用初始化列表效率成员变量在进入构造函数体之前已经完成初始化直接调用其构造函数而不是先默认构造再在函数体内赋值。必须使用初始化列表的场景const成员变量引用成员变量没有默认构造函数的成员对象基类构造函数尤其是需要带参数的基类class Base { public: Base(int x) {} }; class Derived : public Base { private: const int m_ConstVal; int m_Ref; public: Derived(int a, int ref) : Base(a), m_ConstVal(a), m_Ref(ref) // 必须使用初始化列表 { } };1.3 初始化顺序初始化顺序按照成员在类中声明的顺序而不是初始化列表的顺序。为避免依赖未初始化的成员应保证顺序一致。class Example { int m_A; int m_B; public: Example() : m_B(2), m_A(m_B) {} // 危险m_A 先初始化此时 m_B 尚未初始化 };2. 创建和实例化对象2.1 栈上分配自动存储期语法Entity e;或Entity e(name);生命周期在作用域结束时自动调用析构函数并释放内存。优点极快仅栈指针移动无需手动管理内存。缺点生命周期局限于作用域对象大小受栈空间限制通常几 MB。void func() { Entity e; // 栈上创建自动调用构造函数 e.DoSomething(); } // 自动调用析构函数2.2 堆上分配动态存储期语法Entity* e new Entity();或new Entity(name)生命周期需显式调用delete e;释放否则内存泄漏。优点对象生命周期可控可跨作用域存在适合大型对象或需要动态创建的场景。缺点速度慢需堆分配、内存管理开销容易造成内存泄漏或悬空指针。Entity* createEntity() { Entity* e new Entity(Cherno); return e; // 对象在堆上函数返回后仍然存在 } void use() { Entity* e createEntity(); e-DoSomething(); delete e; // 必须手动释放 }2.3 栈 vs 堆Cherno 的建议优先使用栈分配除非确实需要动态生命周期如多态、对象数量不确定、跨函数传递所有权。如果需要动态分配现代 C 应使用智能指针std::unique_ptr、std::shared_ptr代替裸指针避免手动delete。3. new 关键字3.1 new 的作用分配内存调用operator new类似malloc分配足够的内存。调用构造函数在该内存上构造对象。返回指向该对象的指针。3.2 new 与 malloc 的区别特性newmalloc内存来源自由存储区通常是堆堆是否调用构造函数✅❌返回类型类型安全的指针T*void*内存大小自动计算sizeof(T)需手动指定字节数失败处理抛出std::bad_alloc异常返回nullptr3.3 数组形式的 new 与 deleteint* arr new int[10]; // 分配 10 个 int 的数组 delete[] arr; // 必须使用 delete[]保证调用每个元素的析构函数3.4 定位 newplacement new可以在已分配的内存上构造对象常用于自定义内存管理。char* buffer new char[sizeof(Entity)]; Entity* e new (buffer) Entity(Cherno); // 在 buffer 位置构造对象 e-~Entity(); // 手动调用析构 delete[] buffer;4. 隐式构造与 explicit 关键字4.1 隐式构造隐式类型转换隐式构造当构造函数只接受一个参数或除第一个参数外都有默认值编译器允许在需要该类型对象的地方使用该参数类型自动调用构造函数进行隐式转换。隐式转换可能造成意料之外的对象构造降低代码可读性甚至引发隐蔽的错误。4.2 explicit 关键字作用在构造函数前加explicit禁止该构造函数参与隐式类型转换。class Object { private: std::string m_Name; int m_Age; public: explicit Object(const const std::string name) : m_Name(name), m_Age(-1) {} Object(int age) : m_Name(Unknown), m_Age(age) {} }; void PrintObj(const Object obj) { } int main() { //隐式构造 PrintObj(1); Object obj 22; //explicit 会禁止隐式构造 //PrintObj(std::string(Cheer));会报错 //Object obj std::string(Cheer); std::cin.get(); }5. 运算符与运算符重载5.1 基本概念运算符重载允许为用户定义的类型提供自定义的运算符行为。可以重载的运算符包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、下标运算符、函数调用运算符等。某些运算符不能重载如::、.、.*、?:、sizeof等。5.2 成员函数 vs 全局函数成员函数左操作数是当前对象this。全局函数可灵活支持隐式类型转换通常需要声明为友元。class Vector2 { public: float x, y; Vector2 operator(const Vector2 other) const { // 成员函数 return {x other.x, y other.y}; } }; // 全局函数版本通常用于对称性如实现 operator Vector2 operator-(const Vector2 a, const Vector2 b) { return {a.x - b.x, a.y - b.y}; }5.3 常用运算符重载示例赋值运算符class String { char* m_Data; public: String operator(const String other) { if (this ! other) { // 自赋值检查 delete[] m_Data; m_Data new char[strlen(other.m_Data) 1]; strcpy(m_Data, other.m_Data); } return *this; } };流插入与流提取class Point { int m_X, m_Y; public: friend std::ostream operator(std::ostream os, const Point p); }; std::ostream operator(std::ostream os, const Point p) { os ( p.m_X , p.m_Y ); return os; }下标运算符[]class Array { int data[100]; public: int operator[](int index) { return data[index]; } const int operator[](int index) const { return data[index]; } };函数调用运算符()class Multiply { public: int operator()(int a, int b) const { return a * b; } }; Multiply mul; int result mul(3, 4); // 12

相关文章:

C++学习笔记——初始化列表、创建和实例化对象、new 关键字、隐式构造与 explicit 关键字、运算符与运算符重载

目录 1. 初始化列表 1.1 基本语法 1.2 为什么使用初始化列表? 1.3 初始化顺序 2. 创建和实例化对象 2.1 栈上分配(自动存储期) 2.2 堆上分配(动态存储期) 2.3 栈 vs 堆:Cherno 的建议 3. new 关键…...

璀璨星河效果展示:古典结构×现代张力的Z-Image原生艺术生成

璀璨星河效果展示:古典结构现代张力的Z-Image原生艺术生成 “我梦见了画,然后画下了梦。” —— 文森特 梵高 今天,我想带你走进一个特别的数字艺术馆。在这里,冰冷的代码逻辑与炽热的艺术灵魂相遇,古典的审美结构与现…...

RePKG技术探索:Wallpaper Engine资源解析工具深度剖析

RePKG技术探索:Wallpaper Engine资源解析工具深度剖析 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 一、认知困境:数字资源的格式壁垒 创意工作者的格式枷…...

中小企业AI落地:Qwen3-4B-Instruct-2507轻量部署实战

中小企业AI落地:Qwen3-4B-Instruct-2507轻量部署实战 中小企业想用上大模型,常被几个现实问题卡住:显存不够、部署太重、运维不会、成本太高。Qwen3-4B-Instruct-2507这个模型,就是为这类场景量身打磨的——它不追求参数堆砌&…...

基于YOLOv8深度学习的蘑菇毒性检测系统(YOLOv8+YOLO数据集+UI界面+Python项目源码+模型)

一、项目介绍 摘要 随着人们对于野生菌菇膳食兴趣的增加以及户外采摘活动的普及,误食有毒蘑菇的事件频发,对公众健康构成了严重威胁。传统的蘑菇种类鉴别高度依赖专家的形态学经验,普通爱好者难以准确掌握,且现有识别应用在应对…...

Qwen3-VL-30B效果实测:识别复杂图表毫无压力,回答精准又详细

Qwen3-VL-30B效果实测:识别复杂图表毫无压力,回答精准又详细 1. 开篇:当AI真正"看懂"了世界 想象一下这样的场景:你随手拍下一张满是数据和曲线的科研论文图表,AI不仅能准确识别出每个坐标轴的含义&#x…...

SEO优化中关键词的作用是什么_关键词布局对SEO有什么影响

SEO优化中关键词的作用是什么 在现代网络营销中,SEO(搜索引擎优化)是提升网站在搜索引擎结果中排名的重要手段。其中,关键词的作用至关重要。关键词不仅是搜索引擎理解用户意图的重要载体,也是搜索引擎算法评估网站相…...

3步构建智能文献管理系统:Zotero GPT插件从配置到精通指南

3步构建智能文献管理系统:Zotero GPT插件从配置到精通指南 【免费下载链接】zotero-gpt GPT Meet Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-gpt 在信息爆炸的学术环境中,研究人员平均每天需要处理超过20篇文献,传…...

别再只用箱线图了!用R语言vioplot绘制小提琴图的5个高级技巧与常见误区避坑

别再只用箱线图了!用R语言vioplot绘制小提琴图的5个高级技巧与常见误区避坑 当你已经能够熟练地用箱线图展示数据分布时,是否想过有一种更优雅、信息量更大的可视化方式?小提琴图(Violin Plot)正是这样一种工具&#x…...

RePKG工具深度解析:Wallpaper Engine资源处理的技术方案

RePKG工具深度解析:Wallpaper Engine资源处理的技术方案 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 现实痛点层:破解资源处理的三重技术困境 游戏美术师…...

丰田的“改善”到底牛在哪?-云质QMS为您解读精益生产的核心

提到丰田,大家第一反应大概率是精益生产、JIT 即时制,却很少有人深究,支撑丰田几十年持续领跑制造业的底层逻辑,其实是那个看似简单的日语词 ——改善(kaizen)。很多企业学丰田学了个皮毛,照搬流…...

手柄不兼容PC游戏?试试ViGEmBus的虚拟控制器仿真技术

手柄不兼容PC游戏?试试ViGEmBus的虚拟控制器仿真技术 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否遇到过这样的情况:新买的…...

【RT-DETR涨点改进】SCI一区 2025顶刊 |全网独家创新,注意力改进篇 | RT-DETR引入DOAM动态全向注意力模块,模块,显著增强了特征表达能力和结构恢复能力,含7种独家创新改进点

一、本文介绍 🔥本文给大家介绍利用 DOAM 动态全向注意力模块改进RT-DETR网络模型,可在不显著增加计算量的前提下增强全局上下文建模能力,通过空间轴向聚合获得更强的跨区域信息交互,并用通道动态加权突出目标相关特征、抑制背景干扰,从而优化多尺度特征融合效果,提升小…...

上海计算机学会2026年2月月赛C++丙组T1 乘积的秘密

乘积的秘密 题目描述 给定两个整数 A 与 B,保证 A ≤ B。请求出从 A 一直乘到 B 的符号: 如果乘积大于 0,输出 Positive;如果乘积小于 0,输出 Negative;如果乘积等于 0,输出 Zero。 输入格式 两…...

【RT-DETR涨点改进】TGRS 2026 | 全网独家创新、特征融合改进篇| 引入STSAM协同时空注意力融合模块,发论文热点创新,注意力能够互相引导强化边界和结构细节,增强目标检测高效涨点

一、本文介绍 🔥本文给大家介绍使用 STSAM协同时空注意力融合模块 改进RT-DETR网络模型,STSAM 是 空间域特征增强模块,通过全局跨时相注意力和局部坐标注意力的并行处理,能有效聚焦真实变化目标,强化边界和结构细节,同时兼顾训练稳定性,为后续浅层特征融合提供高质量特…...

Nano-Banana与PyTorch Lightning集成:简化深度学习流程

Nano-Banana与PyTorch Lightning集成:简化深度学习流程 用更少的代码,做更多的事情——这就是PyTorch Lightning的魅力所在 如果你正在使用Nano-Banana进行深度学习项目,可能会发现编写训练循环、管理设备、处理日志记录这些重复性工作相当耗…...

2026 年 GEO 优化公司推荐:6家服务商综合实力对比分析

一、GEO 行业进入合规技术双轮驱动的爆发期IDC 最新发布的《2026年全球生成式引擎优化市场报告》显示,2026年全球 GEO(生成式引擎优化)市场规模将达 220 亿美元,年复合增长率高达 122%,中国市场规模预计突破 480 亿元&…...

Ostrakon-VL处理网络协议:从数据包捕获文件可视化网络流量

Ostrakon-VL处理网络协议:从数据包捕获文件可视化网络流量 1. 网络流量分析的痛点与机遇 网络工程师每天都要面对海量的网络数据包,传统的分析工具虽然功能强大,但存在几个明显痛点: 数据量大:一个中等规模企业的日…...

近期 GitHub 上爆火的 34 个极具潜力的开源项目

Coasts GitHub 链接:https://github.com/coast-guard/coasts 一款为 Git 工作区打造的本地主机服务隔离与编排工具,由前 Y Combinator 创始人开发。将自主智能体的主机全访问权限这一安全风险规避,智能体可在容器化主机内创建环境、运行服务…...

Docker---容器编排工具Docker Compose

Docker Compose核心功能使用YAML文件定义多容器应用一键启动/停止/重建整个应用栈管理服务依赖关系与网络配置环境变量集中管理,适配多环境部署核心概念层级Service(服务):一个应用组件,可包含多个相同镜像的容器实例P…...

FlowState Lab 日志分析与性能调优实战

FlowState Lab 日志分析与性能调优实战 1. 为什么需要关注模型服务性能 当你把FlowState Lab模型部署上线后,可能会遇到这样的情况:请求量一大,响应就开始变慢,甚至出现超时。这时候就需要关注服务的性能表现。性能调优不是玄学…...

阿里云RDSClaw:给OpenClaw装上超级记忆和超级大脑,会怎样?

RDSClaw 喊你领取免费试用了!点击下方训练营,可领取免费试用,跟随训练营中的课程可轻松部署你的专属小龙虾! 训练营报名链接:养虾训练营- RDSClaw_阿里云培训中心-阿里云 参营福利:完成RDSClaw实操部署&a…...

阿里云代理商:OpenClaw 技能安全部署指南与高口碑扩展精选

在集成任何 OpenClaw 第三方功能模块前,安全防护是首要环节。核心流程是借助官方安全审查工具,预先扫描潜在威胁,避免因加载恶意模块引发的数据泄漏或设备隐患。1. 核心安防工具部署优先部署 skill-vetting 安全扫描工具(OpenClaw…...

源码被泄露,Claude Code 之父回应:人为错误,没有开除犯事员工

昨天 Claude Code 被泄露开源的事,大家都知道了。 ① 今天上午,估计大家已经看到了一封自称 A 社犯事员工发的帖子,说自己被开除了。其实这哥们搞抽象呢,已经辟谣了,他压根就不是 A 社工程师。 ② Claude Code 之父回应…...

RAG集成:如何让你的企业知识库成为AI的“长期记忆”

核心命题:AI没有记忆,但你的知识库可以成为它的“外脑”。RAG(检索增强生成)是GEO的终极形态:让企业私有数据成为AI生成答案的唯一信源。引言:老陈的新困境——当AI“看见”了你的店,却“看不见…...

Qwen3-VL-2B实战:快速搭建一个能“看懂”图片的智能聊天机器人

Qwen3-VL-2B实战:快速搭建一个能"看懂"图片的智能聊天机器人 1. 项目介绍与核心能力 1.1 什么是视觉语言模型 视觉语言模型(Vision-Language Model)是一种能够同时理解图像和文本的AI技术。不同于传统聊天机器人只能处理文字&am…...

手机号查QQ号终极指南:3分钟快速找回遗忘的QQ号码

手机号查QQ号终极指南:3分钟快速找回遗忘的QQ号码 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 你是否曾因忘记QQ号而无法登录?是否因为更换手机需要重新绑定QQ却找不到账号信息?手机号查QQ号工…...

大海捞针:从海量真实世界5G-A基站数据中追踪无人机

大家读完觉得有帮助记得关注和 点赞!!! 摘要 无人机在日常生活中的潜在应用使得对其监控变得至关重要。然而,现有的无人机监控系统通常依赖于摄像头、激光雷达或雷达,这些系统的感知范围有限或部署成本高昂&#xff0…...

Phi-4-mini-reasoning推理服务监控:通过webshell日志诊断部署状态方法

Phi-4-mini-reasoning推理服务监控:通过webshell日志诊断部署状态方法 1. 模型简介 Phi-4-mini-reasoning 是一个基于合成数据构建的轻量级开源模型,专注于高质量、密集推理的数据处理。作为Phi-4模型家族的一员,它经过专门微调以提升数学推…...

Qwen2.5-14B-Instruct深度微调实录:像素剧本圣殿开源剧本创作指南

Qwen2.5-14B-Instruct深度微调实录:像素剧本圣殿开源剧本创作指南 1. 项目概览 像素剧本圣殿(Pixel Script Temple)是一款基于Qwen2.5-14B-Instruct大模型深度微调的专业剧本创作工具。这个开源项目将前沿AI技术与复古像素美学相结合&#…...