C++享元模式与内存优化
C享元模式与内存优化享元模式通过共享细粒度对象减少内存使用。它将对象状态分为内部状态共享和外部状态上下文相关适合大量相似对象的场景。享元工厂管理共享对象池。#include#include#include#include#includeenum class FontType { SERIF, SANS_SERIF, MONO };struct CharProperty {char character;FontType font;int size;bool bold;bool italic;};class Glyph {char character_;FontType font_;int size_;bool bold_;bool italic_;public:Glyph(char c, FontType f, int s, bool b, bool i): character_(c), font_(f), size_(s), bold_(b), italic_(i) {}void render(int x, int y) const {std::cout Glyph character_ at ( x , y ) font static_cast(font_) size size_ bold bold_ italic italic_ \n;}bool operator(const Glyph other) const {return character_ other.character_ font_ other.font_ size_ other.size_ bold_ other.bold_ italic_ other.italic_;}};struct GlyphHash {size_t operator()(const Glyph g) const {size_t h1 std::hash{}(g.character_);size_t h2 std::hash{}(static_cast(g.font_));size_t h3 std::hash{}(g.size_);size_t h4 std::hash{}(g.bold_);size_t h5 std::hash{}(g.italic_);return h1 ^ (h2 1) ^ (h3 2) ^ (h4 3) ^ (h5 4);}};class GlyphFactory {std::unordered_map, GlyphHash pool_;public:std::shared_ptr get_glyph(char c, FontType f, int s, bool b, bool i) {Glyph temp(c, f, s, b, i);auto it pool_.find(temp);if (it ! pool_.end()) {std::cout Reusing glyph\n;return it-second;}auto glyph std::make_shared(c, f, s, b, i);pool_[temp] glyph;std::cout Creating new glyph (pool size: pool_.size() )\n;return glyph;}size_t pool_size() const { return pool_.size(); }};void flyweight_demo() {GlyphFactory factory;std::vector, std::pair document;document.push_back({factory.get_glyph(H, FontType::SERIF, 12, true, false), {0, 0}});document.push_back({factory.get_glyph(e, FontType::SERIF, 12, true, false), {10, 0}});document.push_back({factory.get_glyph(l, FontType::SERIF, 12, true, false), {20, 0}});document.push_back({factory.get_glyph(l, FontType::SERIF, 12, true, false), {30, 0}});document.push_back({factory.get_glyph(o, FontType::SERIF, 12, true, false), {40, 0}});std::cout \nRendering document:\n;for (const auto [glyph, pos] : document) {glyph-render(pos.first, pos.second);}std::cout \nPool size: factory.pool_size() (5 chars, 4 unique)\n;}粒子系统使用享元。class ParticleTexture {std::string texture_name_;int width_;int height_;public:ParticleTexture(const std::string name, int w, int h): texture_name_(name), width_(w), height_(h) {}void render(int x, int y, int frame) const {std::cout Render texture_name_ ( width_ x height_ ) at ( x , y ) frame frame \n;}};class ParticleTextureFactory {std::unordered_map textures_;public:std::shared_ptr get_texture(const std::string name, int w, int h) {auto it textures_.find(name);if (it ! textures_.end()) return it-second;auto tex std::make_shared(name, w, h);textures_[name] tex;return tex;}};struct Particle {int x, y, frame;std::shared_ptr texture;void render() const {texture-render(x, y, frame);}};void particle_demo() {ParticleTextureFactory factory;std::vector particles;auto fire factory.get_texture(fire, 32, 32);auto smoke factory.get_texture(smoke, 16, 16);for (int i 0; i 5; i) {particles.push_back({10 * i, 20 * i, i, fire});}for (int i 0; i 5; i) {particles.push_back({5 * i, 15 * i, i, smoke});}std::cout 5 fire 5 smoke particles, 2 textures shared\n;for (const auto p : particles) p.render();}享元模式通过共享减少内存占用适合大量重复对象的场景。

相关新闻

JN516x嵌入式开发:异常处理与MicroMAC低功耗无线通信实战

JN516x嵌入式开发:异常处理与MicroMAC低功耗无线通信实战

1. 项目概述:从“跑飞”到“省电”,嵌入式无线开发的硬核双修在嵌入式无线系统开发,尤其是基于NXP JN516x这类资源受限的微控制器构建物联网节点时,我们开发者每天都在和两个核心矛盾作斗争:系统的稳定性与设备的续航能…

2026/6/22 0:24:48阅读更多 →
如何快速搭建免费音乐库:洛雪音乐开源音源完整配置指南

如何快速搭建免费音乐库:洛雪音乐开源音源完整配置指南

如何快速搭建免费音乐库:洛雪音乐开源音源完整配置指南 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 还在为音乐平台的会员费用而烦恼吗?想要免费享受高品质音乐却不知道…

2026/6/22 0:04:35阅读更多 →
国产大模型合规应用实战指南:从部署到Prompt工程

国产大模型合规应用实战指南:从部署到Prompt工程

我不能提供任何关于绕过国家网络监管措施的技术方案或建议。根据中国法律法规和网络管理政策,所有互联网服务必须遵守国家关于网络安全、数据安全和内容安全的相关规定。GPT-5目前并非公开发布的模型,截至2024年,OpenAI官方尚未发布名为“GPT…

2026/6/22 1:18:36阅读更多 →
OpenCore Legacy Patcher终极指南:五步让老旧Mac焕然新生

OpenCore Legacy Patcher终极指南:五步让老旧Mac焕然新生

OpenCore Legacy Patcher终极指南:五步让老旧Mac焕然新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 如果你还在为老旧Mac无法升级到最新macO…

2026/6/22 15:10:51阅读更多 →
FreqFlow:基于频率感知的流匹配模型,提升图像生成细节清晰度

FreqFlow:基于频率感知的流匹配模型,提升图像生成细节清晰度

1. 项目缘起:当图像生成遇上“模糊”的瓶颈最近在折腾图像生成项目,特别是尝试用一些开源模型跑自己的数据集时,总感觉生成的结果“差那么点意思”。不是整体构图有问题,而是细节上总显得有点“糊”,尤其是高频的纹理、…

2026/6/22 15:10:51阅读更多 →
ComfyUI中文工作流实战:如何用预配置节点解决AI绘图进阶难题

ComfyUI中文工作流实战:如何用预配置节点解决AI绘图进阶难题

ComfyUI中文工作流实战:如何用预配置节点解决AI绘图进阶难题 【免费下载链接】ComfyUI-Workflows-ZHO 我的 ComfyUI 工作流合集 | My ComfyUI workflows collection 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-Workflows-ZHO 你是否也曾为Co…

2026/6/22 15:10:51阅读更多 →
如何在64位Windows上完美运行16位程序:winevdm终极兼容方案指南

如何在64位Windows上完美运行16位程序:winevdm终极兼容方案指南

如何在64位Windows上完美运行16位程序:winevdm终极兼容方案指南 【免费下载链接】winevdm 16-bit Windows (Windows 1.x, 2.x, 3.0, 3.1, etc.) on 64-bit Windows 项目地址: https://gitcode.com/gh_mirrors/wi/winevdm 你是否还在为无法在现代64位Windows系…

2026/6/22 15:10:51阅读更多 →
重新定义Android应用生态:AuroraStore的技术革命与隐私解放

重新定义Android应用生态:AuroraStore的技术革命与隐私解放

重新定义Android应用生态:AuroraStore的技术革命与隐私解放 【免费下载链接】AuroraStore 项目地址: https://gitcode.com/gh_mirrors/au/AuroraStore 在当今移动应用生态中,Google Play商店几乎是Android设备的标配,但这种中心化模式…

2026/6/22 15:10:51阅读更多 →
InstructPix2Pix终极指南:用自然语言指令重塑图像的完整实践手册

InstructPix2Pix终极指南:用自然语言指令重塑图像的完整实践手册

InstructPix2Pix终极指南:用自然语言指令重塑图像的完整实践手册 【免费下载链接】instruct-pix2pix 项目地址: https://gitcode.com/gh_mirrors/in/instruct-pix2pix 想象一下,你只需对一张照片说"把它变成梵高风格的油画"&#xff0…

2026/6/22 15:05:49阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/22 6:01:42阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/22 1:15:34阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/22 5:42:46阅读更多 →
Codex本地AI编码代理与CC Switch协议适配实战

Codex本地AI编码代理与CC Switch协议适配实战

1. Codex不是“另一个VS Code插件”,而是本地AI编码代理的临界点Codex这个名字,现在被太多人误读了。它不是ChatGPT那个早已停更的旧模型代号,也不是某个新出的VS Code扩展图标——它是2024年中后期悄然浮出水面的一类本地化AI编码代理&#…

2026/6/22 0:04:18阅读更多 →
从MSP430到Flexis QE128:8/32位MCU无缝迁移与低功耗设计实战

从MSP430到Flexis QE128:8/32位MCU无缝迁移与低功耗设计实战

1. 项目概述:当8位MCU遇到性能瓶颈,我们如何优雅升级?在嵌入式开发领域,尤其是电池供电的便携式设备、工业传感器节点或智能家居终端中,我们常常面临一个经典的两难选择:是选择功耗极低但性能有限的8位微控…

2026/6/22 0:04:18阅读更多 →
大语言模型空间推理能力提升:TEXT2SPACE数据集与ASCII增强技术解析

大语言模型空间推理能力提升:TEXT2SPACE数据集与ASCII增强技术解析

1. 项目缘起:当大语言模型“看”不懂空间 最近在折腾大语言模型(LLM)的各种应用时,我发现一个挺有意思的现象:你让模型写首诗、写代码、甚至做逻辑推理,它可能都表现得有模有样。但一旦涉及到需要理解“空间…

2026/6/22 0:04:18阅读更多 →