小学生学C++编程语法知识(C++中如何实现“只能静态分配”和“只能动态分配”的类?)
什么叫静态分配什么叫动态分配假设有一个学生对象Student stu;这个对象放在哪里通常栈区 (Stack)这种叫静态分配stack allocation如果Student *p new Student();对象在哪里堆区 (Heap)这种叫动态分配heap allocation生活比喻静态分配像爸爸妈妈给你买了一间固定房子。出生Student s;离开作用域}自动销毁。动态分配像去租房子。申请new Student();不用了delete;自己归还。一、如何实现“只能动态分配”的类也就是说我们希望允许Student *p new Student();但是禁止Student s;怎么办方法把析构函数设为 private例如class Student { private: ~Student() { } public: Student() { } }; int main() { Student s; //错误 Student *pnew Student(); //也错误 }为什么因为对象销毁的时候Student s;系统自动调用s.~Student();但是析构函数private外面不能访问。所以编译错误。但是注意这样Student *pnew Student();也不行。为什么因为以后delete p;需要调用~Student()但是析构函数private。所以无法delete。正确方法让用户不能delete提供自己的释放函数。例如class Student { private: Student() { } ~Student() { } public: static Student* create() { return new Student(); } void destroy() { delete this; } };使用Student *pStudent::create(); p-destroy();但是这里有一个问题构造函数也private了。为什么因为如果不限制Student s;还是可以创建。所以只能动态分配类关键构造函数 private 析构函数 private 提供创建函数完整class Student { private: Student() { cout创建endl; } ~Student() { cout销毁endl; } public: static Student* create() { return new Student(); } void destroy() { delete this; } };使用int main() { Student *pStudent::create(); p-destroy(); }输出创建 销毁二、为什么要设计只能动态分配有什么用例如1. 单例模式很多系统对象只能有一个。比如游戏中的服务器数据库连接日志系统希望Server s;不允许。只能Server::getInstance();统一管理。2. 控制生命周期比如一个网络连接希望程序运行期间一直存在。不希望离开函数自动消失。三、如何实现“只能静态分配”的类现在反过来。希望允许Student s;禁止Student *pnew Student();也就是只能栈上创建。方法让 new 失败。C中new实际上调用operator new()所以我们禁止它。代码class Student { public: Student() { } private: void* operator new(size_t) { return nullptr; } };现在Student s;可以。因为直接创建。但是Student *pnew Student();会调用operator new而它是private。所以错误。四、为什么operator new可以控制new很多小朋友认为new Student()只是创建对象。其实它分两步第一步申请空间operator new()第二步调用构造函数Student()例如new Student();类似申请内存 | ↓ 调用构造函数 | ↓ 对象出生所以控制operator new就可以控制动态创建。五、实际工程中的应用1. 只能动态分配常见单例模式例如class Database { private: Database(){} public: static Database get() { static Database db; return db; } };2. 只能静态分配比较少见。例如一些轻量对象希望不允许new防止大量创建生命周期简单六、容易混淆的问题问构造函数private是不是只能动态分配答不一定。例如class A { private: A(){} };结果什么都不能创建。因为外部A a;不行。new A();也不行。必须提供接口。例如static A* create();七、小学生记忆口诀只能动态分配想象房子只能租不能买。做法构造函数 private 析构函数 private 提供 create()只能静态分配想象只能住学校宿舍不能出去租房。做法public 构造函数 private operator new()八、总结表目标禁止实现只能动态分配栈对象构造函数private普通delete析构函数private提供create/destroy只能静态分配new创建重载operator new为private最后给学生一个总结C中控制对象在哪里创建本质是在控制两个入口创建入口构造函数内存申请入口operator new控制这两个入口就可以控制对象只能在栈上创建或者只能在堆上创建。这个知识点也是理解C对象生命周期、RAII、单例模式、智能指针设计的基础。

相关新闻

小学生学C++编程语法知识(C++构造函数、析构函数可以抛出异常吗?)

小学生学C++编程语法知识(C++构造函数、析构函数可以抛出异常吗?)

C构造函数、析构函数可以抛出异常吗? 我们先回忆一下: 构造函数:负责“出生”,创建一个对象。 析构函数:负责“离开”,销毁一个对象,清理资源。 比如: class Student { public:S…

2026/8/9 13:52:26 阅读更多 →
Coolapk-UWP架构深度解析:如何构建高性能的UWP第三方客户端

Coolapk-UWP架构深度解析:如何构建高性能的UWP第三方客户端

Coolapk-UWP架构深度解析:如何构建高性能的UWP第三方客户端 【免费下载链接】Coolapk-UWP 一个基于 UWP 平台的第三方酷安客户端 项目地址: https://gitcode.com/gh_mirrors/co/Coolapk-UWP Coolapk-UWP是一款基于UWP平台的第三方酷安客户端,为开…

2026/8/9 13:52:26 阅读更多 →
GetQzonehistory:三分钟拯救你的QQ空间数字记忆

GetQzonehistory:三分钟拯救你的QQ空间数字记忆

GetQzonehistory:三分钟拯救你的QQ空间数字记忆 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾有过这样的焦虑——那些记录着青春点滴的QQ空间说说,会不…

2026/8/9 13:51:26 阅读更多 →

最新新闻

解析 _for-sale DNS 记录:域名出售新方式的优势、实现及常见错误

解析 _for-sale DNS 记录:域名出售新方式的优势、实现及常见错误

跳转到主要内容 网站规范:优秀网站的特质 所有主题 检查清单 MCP 关于 贡献内容 搜索 ⌘K 所有主题 检查清单 搜索 更新日志 已考虑事项 MCP 服务器 关于 贡献内容 GitHub 分类 基础 SEO 可访问性 安全性 知名 URI 代理准备情况 性能 隐私 弹性 国际化 基础 SEO 可访…

2026/8/9 14:51:59 阅读更多 →
数字后端设计中不规则floorplan的route blockage技巧

数字后端设计中不规则floorplan的route blockage技巧

1. 项目概述在数字后端设计流程中,给不规则形状的floorplan添加route blockage ring是一个常见但颇具挑战性的任务。作为一名有十年经验的数字后端工程师,我经常遇到需要在芯片边缘或模块周围创建阻挡环(blockage ring)的情况&…

2026/8/9 14:51:59 阅读更多 →
基于Qwen2.5与DeepSeek的本地AI开发环境搭建与IDE集成实战

基于Qwen2.5与DeepSeek的本地AI开发环境搭建与IDE集成实战

最近AI圈真是热闹非凡,各种重磅消息接踵而至,让开发者们应接不暇。先是传闻Qwen 4.0的模型权重疑似泄露,紧接着DeepSeek V4的发布预告又点燃了社区,而GLM 5.3也蓄势待发。对于广大AI应用开发者和技术爱好者而言,这不仅…

2026/8/9 14:51:59 阅读更多 →
软件卸载不干净导致无法重装?逐一排查残留文件和注册表项

软件卸载不干净导致无法重装?逐一排查残留文件和注册表项

相信不少人都遇到过这种糟心的情况:明明已经把某个软件从控制面板里卸载了,桌面上也没有它的图标了,可当你试图重新安装同一个软件时,安装程序却直接弹出一个红叉报错,或者提示“已安装”、“检测到现有实例”&#xf…

2026/8/9 14:51:59 阅读更多 →
重复文件清理工具如何避免误删?手把手教你安全腾出磁盘空间

重复文件清理工具如何避免误删?手把手教你安全腾出磁盘空间

最近好几个朋友都遇上同一个头疼事:C盘又飘红,文件堆积得像年底的购物清单,根本分不清哪些有用、哪些是副本。最让人抓狂的,就是脑子里一直回响的那句“万一删错了怎么办”。尤其面对同一份PPT在不同文件夹里出现三四次&#xff0…

2026/8/9 14:51:59 阅读更多 →
高频材料测试夹具16089A的原理与应用指南

高频材料测试夹具16089A的原理与应用指南

1. 测试夹具行业背景与核心价值 在射频和微波测试领域,测试夹具作为连接被测器件(DUT)与测试仪器的桥梁,其性能直接影响测量结果的准确性。安捷伦(现为是德科技Keysight)的16089A测试夹具就是为高频材料介电常数测试而设计的专业工…

2026/8/9 14:50:59 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →