尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
C++(21)——特殊类设计
1. 不能被拷贝的类实现方式1.私有化C98将拷贝构造函数与赋值运算符重载只声明不定义并且将其访问权限设置为私有即可原理1. 只声明不定义防止类内部不小心调用2. 设置成私有外部不能访问私有成员因此无法拷贝缺点1. 如果类里面的成员函数调用了拷贝编译不会报错链接阶段报错2. 可读性差2.删除函数C11将拷贝构造函数与赋值运算符重载后面加上 delete原理1. 在默认成员函数后写上 delete 表示该禁止生成该默认成员函数2. 只能在堆上创建对象的类实现方式1. 构造函数私有化首先将类的构造、拷贝构造声明为私有类内部提供一个静态的成员函数用来完成堆对象的创建原理将构造函数私有化外部无法访问类内部的静态成员函数可以访问私有构造拷贝构造私有化防止栈上通过调用拷贝构造来创建对象2. 析构函数私有化备选将类的析构函数声明为私有类内部提供一个静态的成员函数用来完成堆对象的释放原理栈对象出作用域时编译器自动调用析构函数将析构私有外部无法访问编译器预判栈对象无法销毁直接禁止创建栈对象缺点可以生成匿名临时对象有漏洞、会报错3. 只能在栈上创建对象的类实现方法在类里面把类专属的 operator new 用 delete 删除原理new的底层有两步1. 调用全局的 operator new(size_t) 函数在堆上开辟一块内存 2. 编译器调用构造函数初始化这块内存。当new该类对象时编译器优先找类内的 operator new 该函数被删除编译失败无法开辟。缺点不能阻止定位new定位new不会调用 operator new 只调用构造4. 不能被继承的类实现方法类名后加上 final 关键字原理加上 final 表示该类不能被继承5. 只能创建一个对象的类——单例模式单例模式一个类只能创建一个对象保证系统中该类只有一个实例并提供一个访问它的全局访问点该实例被所有程序模块共享核心要点1.构造函数私有化2.类内部保存唯一静态对象/指针3. 提供一个public静态成员函数GetInstances()用来拿取该唯一对象4.禁止拷贝防止拷贝出新对象实现方法1. 饿汉模式类外初始化静态对象程序启动时就创建好唯一对象原理无论什么时候调用 GetInstances()对象都已经存在class Singleton { private: //构造私有外部不能创建 Singleton(){} //唯一对象静态成员 static Singleton _inst; public: //获取实例 static Singleton GetInstance() { return _inst; } //禁止拷贝防止复制出新对象 Singleton(const Singleton) delete; Singleton operator(const Singleton) delete; }; //类外初始化静态对象main运行前就创建完成 Singleton Singleton::_inst; int main() { Singleton s1 Singleton::GetInstance(); Singleton s2 Singleton::GetInstance(); // s1 和 s2 是同一个对象 return 0; }优点线程安全多线程场景不会创建多个对象代码简单缺点程序一开始就占用内存可能会导致进程启动慢多个单例类对象实例启动顺序不确定不能控制初始化时机2. 懒汉模式类外指针初始化为空第一次调用 GetInstances() 时才new对象原理第一次访问时判断为空new出对象之后每次直接返回已存在的对象class Singleton { private: Singleton(){} //初始为空不创建对象 static Singleton* _pinst; public: static Singleton GetInstance() { if (_pinst nullptr) { _pinst new Singleton; } return *_pinst; } Singleton(const Singleton) delete; Singleton operator(const Singleton) delete; }; //静态指针初始化为空 Singleton* Singleton::_pinst nullptr; int main() { Singleton s Singleton::GetInstance(); return 0; }优点需要时才创建节省内存缺点多线程不安全代码较复杂
RELATED

相关推荐

ZVS二级升压电路设计:从高效振荡到精准稳压的工程实践

ZVS二级升压电路设计:从高效振荡到精准稳压的工程实践

上周,我为了给一个户外项目供电,需要把一节3.7V的锂电池电压稳定提升到12V。手头正好有几颗MOS管和电感电容,第一反应就是搭一个经典的ZVS电路。结果,电路是振荡起来了,电压也确实升上去了,但带载能力弱得离…

📅 2026/9/12 1:21:25
MKVToolNix:无损封装神器,高效处理视频合并与字幕封装

MKVToolNix:无损封装神器,高效处理视频合并与字幕封装

如果你经常处理视频文件,特别是从网上下载的影视资源、课程录像,或者自己录制的多段素材,大概率遇到过这样的困扰:下载的视频是分段的,需要合并;或者字幕、音轨是单独的文件,需要封装到视频里&a…

📅 2026/10/7 14:37:46
让 Codex 定时跑起来:自动化代码审查、日志与项目健康检查

让 Codex 定时跑起来:自动化代码审查、日志与项目健康检查

在目前的开发工作流里,AI 编程工具已经从“偶尔试试”变成了“每天都在用”。特别是 Codex CLI 这类终端工具,它能够直接读取仓库代码、执行命令、修改文件,比网页对话框更接近真实开发场景。不过大多数人的使用方式还是手动唤起,…

📅 2026/9/17 17:29:35
MORE NEWS

更多资讯

📰

AI设计常温自愈合塑料:动态共价键与分子动力学优化

1. 项目概述:AI如何颠覆自愈合塑料设计范式 当我在材料实验室第一次见到那块被划伤后24小时内完全复原的塑料样品时,意识到传统材料设计正在经历范式转移。这种基于AI设计的常温自愈合塑料,不需要传统工艺中的加热、光照或溶剂处理&#xff0…

📰

AI入门必学:20个核心概念与工业级实战指南

1. AI入门者的20个核心概念全景图 刚接触AI时,我常被各种术语搞得晕头转向。经过三年实战,我梳理出这条学习路径:先掌握基础概念,再理解模型原理,最后落地应用。以下是经过工业级项目验证的20个核心概念框架&#xff1…

📰

MySQL5.7数据库安装与配置全指南

1. MySQL5.7数据库安装全指南 MySQL作为最流行的开源关系型数据库之一,5.7版本因其稳定性与性能表现至今仍是众多生产环境的首选。不同于新版本对硬件资源的较高要求,5.7版在4核8G配置的服务器上即可流畅运行OLTP业务,这也是为什么至今仍有大…

📰

RNN核心原理与LSTM优化实战指南

1. 循环神经网络(RNN)的本质与核心结构 循环神经网络(Recurrent Neural Network)是一种专门处理序列数据的神经网络架构。与传统前馈神经网络不同,RNN引入了"记忆"的概念——网络能够保留之前步骤的信息并用…

📰

MCP协议解析:从JSON-RPC到多智能体系统生态

1. MCP:从数据标准到智能体生态的全面解析第一次看到MCP这个缩写时,我下意识以为又是一个新的技术协议。但当我真正深入这个领域后才发现,MCP代表的是一个远比协议更宏大的技术生态体系。作为在分布式系统领域工作多年的开发者,我…

📰

从“差不多”到“无可挑剔”:用检查清单打造 impeccable 交付物

“impeccable”这个词最近在我们团队内部成了高频词。导火索是一份给客户的方案,大家都觉得内容没什么问题,可客户还是挑出三处错别字和一处逻辑跳跃。同事开会时半开玩笑地说:这次不算impeccable。我愣了一下,发现这个词比我原来…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬