对象池模板

概述

对象池的引入也是嵌入式开发的常用方法,也是内存预分配的一种,主要是用来隐藏全局对象的跟踪,通常预内存分配是通过数组来实现。

CMake配置

cmake_minimum_required(VERSION 3.5.1)project(objpool)add_executable(objpool objpool.cpp)set(CMAKE_SYSTEM_NAME Linux)SET(CMAKE_CXX_FLAGS "--std=c++11")

完整Demo

#include <iostream>template<class T, size_t N>
class ObjectPool {private:T objects[N];size_t available[N];size_t top = 0;public:ObjectPool(): top(0) {for (size_t i = 0; i < N; i++) {available[i] = i;}}T& get() {if (top < N) {size_t idx = available[top++];return objects[idx];} else {throw std::runtime_error("All objects are in use");}}void free(const T& obj) {const T* ptr = &obj;size_t idx = (ptr - objects) / sizeof(T);if (idx < N) {if (top) {objects[idx].deinit();top--;available[top] = idx;} else {throw std::runtime_error("Some object was freed more than once");}} else {throw std::runtime_error("Freeing object that does not belong to the pool");}}size_t requested() const { return top; }
};struct Point {int x, y;void deinit() { std::cout << "Hello " << x << ", " << y << "\n"; }
};int main() {ObjectPool<Point, 10> points;Point& a = points.get(); a.x = 10; a.y=20;std::cout << "Point a (" << a.x << ", " << a.y << ") initialized, requested " <<points.requested() << std::endl;Point& b = points.get(); std::cout << "Point b (" << b.x << ", " << b.y << ") not initialized, requested " <<points.requested() << std::endl;points.free(a);std::cout << "Point a(" << a.x << ", " << a.y << ") returned, requested " <<points.requested() << std::endl;Point& c = points.get();std::cout << "Point c(" << c.x << ", " << c.y << ") not intialized, requested " <<points.requested() << std::endl;Point local;try {points.free(local);} catch (std::runtime_error e) {std::cout << "Exception caught: " << e.what() << std::endl;}
}

运行结果


我公司承接各类技术服务,主要聚焦于:stm32、单片机、嵌入式、QT应用开发、Web+Python+Django应用开发。欢迎合作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/702601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言《数据结构与算法》安排教学计划课设

背景&#xff1a; 10、安排教学计划 (1) 问题描述。 学校每学期开设的课程是有先后顺序的&#xff0c;如计算机专业&#xff1a;开设《数据结构》课程之前&#xff0c;必须先开设《C语言程序设计》和《离散数学》课程&#xff0c;这种课程开设的先后顺序称为先行、后继课程关…

在使用nginx的时候快速测试配置文件,并重新启动

小技巧 Nginx修改配置文件后需要重新启动&#xff0c;常规操作是启动在任务管理器中关闭程序然后再次双击nginx.exe启动&#xff0c;但是使用命令行就可以快速的完成操作。 将cmd路径切换到nginx的安装路径 修改完成配置文件后 使用 nginx -t校验nginx 的配置文件是否出错 …

【Swift学习路线讲解】

Swift学习路线讲解 Swift学习路线 Swift学习路线 Swift 是 Apple 开发的一种强大的编程语言&#xff0c;专门为 iOS、macOS、watchOS 和 tvOS 应用程序设计&#xff0c;如果你想成为一名 Swift 开发者&#xff0c;以下是一个推荐的学习路线&#xff1a; 基础概念&#xff1a; …

海豚调度DolphinScheduler入门学习

DS简介&#xff1a; DolphinScheduler 是一款分布式的、易扩展的、高可用的数据处理平台&#xff0c;主要包含调度中心、元数据管理、任务编排、任务调度、任务执行和告警等模块。其技术架构基于 Spring Boot 和 Spring Cloud 技术栈&#xff0c;采用了分布式锁、分布式任务队列…

vue3 实现 el-pagination页面分页组件的封装以及调用

示例图 一、组件代码 <template><el-config-provider :locale"zhCn"><el-pagination background class"lj-paging" layout"prev, pager, next, jumper" :pager-count"5" :total"total":current-page"p…

深度学习基础(四)医疗影像分析实战

之前的章节我们初步介绍了卷积神经网络&#xff08;CNN&#xff09;和循环神经网络&#xff08;RNN&#xff09;&#xff1a; 深度学习基础&#xff08;三&#xff09;循环神经网络&#xff08;RNN&#xff09;-CSDN博客文章浏览阅读1.2k次&#xff0c;点赞17次&#xff0c;收…

机器学习基础(六)TensorFlow与PyTorch

导语&#xff1a;上一节我们详细探索了监督与非监督学习的结合使用。&#xff0c;详情可见&#xff1a; 机器学习基础&#xff08;五&#xff09;监督与非监督学习的结合-CSDN博客文章浏览阅读4次。将监督学习和非监督学习结合起来&#xff0c;就像将两种不同的艺术形式融合&a…

1298 - 摘花生问题

题目描述 Hello Kitty 想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图)&#xff0c;从西北角进去&#xff0c;东南角出来。地里每个道路的交叉点上都有种着一株花生苗&#xff0c;上面有若干颗花生&#xff0c;经过一株花生苗就能摘走该它上面所有…

刷题第四天

代码随想录刷题第四天 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II 24. 两两交换链表中的节点 有一个点学到了 while循环那里的cur->next!nullptr&&cur->next->next!nullptr 顺序不要错了 /*** Definit…

ROS下控制无人机任任意方向下往机头方向飞行

引言&#xff1a;再一些比赛或者其他应用场景下&#xff0c;无人机需要程序设置按照机头方向正前方飞行。由于ROS下采用ENU坐标系&#xff0c;PX4采用NED坐标系&#xff0c;因此我们在写程序代码的时候&#xff0c;往往需要现根据角度和距离算出X,Y坐标位置才能让无人机到达准确…

消息中间件篇之RabbitMQ-消息重复消费

一、导致重复消费的情况 1. 网络抖动。 2. 消费者挂了。 消费者消费消息后&#xff0c;当确认消息还没有发送到MQ时&#xff0c;就发生网络抖动或者消费者宕机。那当消费者恢复后&#xff0c;由于MQ没有收到消息&#xff0c;而且消费者有重试机制&#xff0c;消费者就会再一次消…

留给2024年2月26日的自己

亲爱的北航追梦人&#xff1a; 你好&#xff01; 初试成绩已经出来了&#xff0c;现在的你&#xff0c;究竟心情如何&#xff1f;可能会很失落&#xff0c;悔恨当初自己的不努力&#xff1b;可能会庆幸自己也许能够擦线进入面试&#xff0c;为了接下来繁重的面试而努力&#xf…

python print 格式化输出详解

print 输出字符串和数字 以下实例中列举了print打印各种类型的示例 示例如下, print("qayrup") # 直接输出字符串print(100) # 输出数字str qayrup print(str) # 输出变量L [1,2,a] # 输出列表类型变量 print(L) t (1,2,a…

Folx GO+ 5.27 Mac上优秀好用的下载工具

Folx Pro 5 for Mac是Mac平台上公认的最好的下载工具&#xff0c;功能可以与迅雷相媲美。目前Folx Pro 5 特别版正式上线&#xff0c;新版的Folx整体界面更加简洁漂亮&#xff0c;支持HTTP FTP下载&#xff0c;torrent种子下载&#xff0c;高速下载&#xff0c;定时下载&#x…

C语言中strstr函数的使用!

strstr函数的作用是什么&#xff1f; 查找子字符串 具体直接看下面的这段代码我相信你必明白 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { char *p1 "abcdefghijklmnopqrstuvwxyz"; char* p2 "abc"; char* r…

我与软件...

从2020年毕业到现在&#xff0c;回首接触软件开发&#xff0c;接触前端已经第四个年头。说我算是科班&#xff0c;其实也就在学校学了点皮毛吧。 当初选软件专业&#xff0c;也是当年偶然认识的一个朋友推荐。刚巧年前也有机会和老大哥一起吃了顿饭。感慨时光真快啊。想想当初…

Open CASCADE学习|提取面的内外环线

在Open CASCADE中&#xff0c;区分内环和外环主要基于面的参数域内环线方向的定义。具体来说&#xff0c;在面的参数域内&#xff0c;沿着环线正方向前进时&#xff0c;如果左侧为面内、右侧为面外&#xff0c;那么该环线被视为外环&#xff1b;反之&#xff0c;如果左侧为面外…

access数据库泄露与IIS短文件名利用

access数据库 Microsoft Office Access是微软把 数据库引擎 的图形用户界面和 软件开发工具 结合在一起的一个 数据库管理系统 它的数据库是没有库名的&#xff0c;都是表名。 (借用别的up的图)是不是感觉有点像excel access数据库的后缀是.mdb access数据库泄露漏洞 如果…

PHATGOOSE:使用LoRA Experts创建低成本混合专家模型实现零样本泛化

这篇2月的新论文介绍了Post-Hoc Adaptive Tokenwise Gating Over an Ocean of Specialized Experts (PHATGOOSE)&#xff0c;这是一种通过利用一组专门的PEFT模块(如LoRA)实现零样本泛化的新方法 这个方法冻结整个模型&#xff0c;包括PEFT模块&#xff0c;并为每个模块训练一…

2024牛客寒假算法基础集训营6

文章目录 A-宇宙的终结B-爱恨的纠葛C-心绪的解剖D-友谊的套路E-未来的预言F-命运的抉择I-时空的交织J-绝妙的平衡 A-宇宙的终结 用试除法分解质因数&#xff0c;判断是否刚好分解为三个不同的质数 #include<bits/stdc.h> #define endl \n #define int long long using …