GEM4上已经有了,很不错的一套实现。
基于Java垃圾管理机制的程序,基本不需要考虑资源的删除问题,但是C++程序员经常恼火的就是资源的问题。
普通的资源系统的做法,如果像OGRE那样,很多人已经觉得很酷了,但是我总觉得OGRE的资源系统反倒是写的最糟糕的一套系统。到1.0发布版本的前一个版本为止,资源系统仍然有些逻辑没有写完,包括多资源动态调入调出,可能OGRE社群还没遇到像WOW这样动辄数个GB的资源的应用。
在动态调入调出前,需要解决的一个问题,就是明确哪些资源可以调出,再说明白些,就是哪些资源目前没有被使用?
这个问题,COM可以解答,就是“标准的”AddRef、Release机制,但这个机制有一个臭名昭著的问题,就是迫使每个人在进行指针赋值的时候都必须自己自觉地加一个AddRef,指针销毁的时候,都用Release销毁。
例如:
RESOURCE * pRes = GetResMgr()->GetRes("sth");
这是绝对没问题的,sth会被Addref。
但是,您防不住:
RESOURCE * pRes2 = pRes;
而这时候,如果pRes2没有被手动AddRef,哼哼哼哼……
难道COM的开发者以为共产主义社会已经来临了?自觉?搞笑吧,只要有一个人不自觉,他就会很郁闷。他的郁闷会进而转化为使用他写的程序的人的郁闷。再进而转化为这个人所在公司的郁闷:人们会向这个公司的油箱里塞入成千上万谩骂、威胁的信笺……或许还有通知“法庭上见”的律师函。
如果您开发的是一个引擎,千万不要认为使用引擎的人都是牛人,都是自觉的人。就像当您开发一个游戏的时候,千万不要以为游戏的使用者都是中规中矩的玩家,他们有时候经常会做一些在您眼里奇怪的事情,如果这时候,游戏挂了,您觉得这个错误该让谁来买单呢?让玩家吗?
可以,但是您将因此失去一个玩家,或者,如果这个人是某个BBS的牛人,您将因此失去整个某BBS的人,然后一传十十传百……
请一定要记住一句话:“舆论的最大优势是在于它杀死一个人是如此的高效,而却不必为此承担任何法律责任”。谁说的?……我。
言归正转,看看我们要做的事情:我们肯定不能避免指针对指针的赋值,这是前提;我们不想让人们在这种时候都去记住调一个AddRef,怎么办呢?
学习一下Windows吧,高明的Windows在管理内核对象的时候,用的是什么?恩,对了,Handle。
在C++中,Handle是一个void*指针,无论是HWND、HINSTANCE还是别的,都是一个typedef void* HXX,但是我想我们没必要这么笨的。
我们的Handle可能类似于下面的样子:
class Handle
{
...
public:
RESOURCE* ptr;
...
};
没甚么啊,您会说,就是一层包装而以。
对,但是包装后我们就可以做很多事情了哦~,比如说在包装上打上商店的商标,呵呵,人们就可以免费为我们做广告了。
我们可以重载拷贝构造子和赋值号,而在构造子、拷贝构造子中、赋值号中,我们可以:
ptr->AddRef()
同理,Handle销毁的时候:
ptr->Release()
这回就算有人能把自己的老婆都忘掉,他也绝对忘不掉去调用AddRef了,虽然他自己都不知道这个AddRef是在哪里调用的。
但您必须保证,在资源系统,以及任何用到这些资源的地方,都只使用Handle,不过我想这应该很容易。
如果还不明白,就去看《游戏编程精粹4》吧,80快钱,不过您不用买,只需要去看中间那个章节就可以了,好像是什么什么“弱引用”什么什么来着。
分享到:
相关推荐
人力资源管理系统是针对中小型企业对现有员工和新聘员工的一个Web管理平台,主要包括以下功能模块: 员工管理模块:主要用于浏览员工信息、添加员工信息、修改员工信息和删除员工信息。 招聘管理模块:主要用于对...
总的来说,这个开源的人力资源管理系统结合了C#、VS2008和SQL Server 2005的优势,为开发者提供了一个完整的解决方案,无论是对于初学者理解软件开发流程,还是对于有经验的开发者提升技术水平,都有着不可忽视的...
人力资源管理系统.,解到一个总目录 系统采用C/S,B/S结构,具有全面的人事信息管理、工资管理、 社会保险和公积金管理、退休/退养/下岗/辞职、 人员管理等人事劳资管理功能、强大的查询统计能力、 自动生成...
《基于UML的人力资源管理系统建模》 在当今信息化社会,企业对于高效、精确的人力资源管理愈发重视。基于UML(统一建模语言)的人力资源管理系统建模成为解决这一问题的有效手段。UML作为一种图形化建模工具,能够...
hr人力资源管理系统,很好用,有源码,简单易懂
【标题】:“人力资源管理系统后台模板 html模板” 这个标题指出我们关注的是一个人力资源管理系统的后台界面设计,采用...对于需要搭建或改进人力资源管理系统的企业或个人开发者来说,这是一个非常有价值的工具。
C++人力资源管理系统源码 系统介绍 人力资源管理系统是这样的一种管理软件,它能够快速、方便地显示结果,还可以对有关工资的各种信息进行统计,服务于财务部门及公司主要管理者。实施人力资源管理系统可以集中、...
总之,基于SSH开发的企业人力资源管理系统为企业提供了一套高效、全面的员工管理解决方案,涵盖了从员工招聘、培训、考核到离职的全过程,有助于提高人力资源部门的工作效率,优化企业管理,提升企业竞争力。
【C#人事人力资源管理系统源码】是一个基于C#编程语言开发的系统,主要目标是管理和优化企业的人力资源流程。这个系统可能包含了员工信息管理、招聘管理、考勤管理、薪酬福利、培训发展、绩效考核等多个模块,旨在...
【标题】:“人力资源管理系统后台模板(经典)”指的是一个专为管理人力资源的后台系统设计的网页模板。这个模板被标记为“经典”,意味着它可能是一个经过时间考验、广泛使用并且功能完善的布局方案。 【描述】:...
【ASP人力资源管理系统详解】 在IT领域,一个"ASP人力资源管理系统"是基于Active Server Pages (ASP)技术构建的,用于管理企业内部人力资源的软件系统。ASP是一种由微软开发的服务器端脚本环境,允许开发者创建动态...
【基于Web的人事管理系统】是一种将人力资源管理流程数字化并整合到网络平台上的解决方案。它旨在提高组织内部人事工作的效率和准确性,通过集中化的数据存储、自动化的工作流程以及用户友好的界面,实现对员工信息...
《人力资源管理系统:深入解析asp.net(c#)与SQL技术实现》 在当今信息化社会,人力资源管理系统(HRM System)已经成为企业高效管理人才、优化工作流程的关键工具。本系统基于asp.net(c#)技术和SQL数据库,结合...
《基于ThinkPHP的人力资源管理系统详解》 在信息化时代的今天,企业对人力资源管理的需求日益增长,而基于开源框架ThinkPHP开发的人力资源管理系统(HRMS)成为了解决这一需求的有效工具。本文将深入探讨ThinkPHP框架...
实验室教学资源管理系统包括如下几个功能: (1)实验室管理 (2)实验仪器设备管理 (3)教师管理 (4)学生管理 (5)选课管理 (6)教学资料管理 (7)学生作业管理 (8)实验预约管理 (9)论坛子系统 基本满足...
《C# 人力资源管理系统:构建高效的企业人事管理平台》 在现代企业管理中,人力资源管理扮演着至关重要的角色。为了提高管理效率,许多公司选择开发或采用现成的人力资源管理系统(HR System)。本文将深入探讨基于...
在IT领域,Windows资源管理器是一个非常重要的工具,它提供了用户与操作系统进行文件和文件夹交互的图形界面。本文将深入探讨如何使用C#语言来创建一个类似Windows资源管理器的应用程序,主要涉及的关键技术包括...
【描述】:“狂神说,超市订单管理系统,smbms,静态资源”进一步强调了这个系统是由知名IT教育者“狂神”讲解的,他通过“狂神说”这个平台分享了关于SMBMS的教程,而“静态资源”通常包括网页设计中不随用户交互改变...
《MFC信息管理系统:深入解析与实践》 MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于构建Windows应用程序。它基于面向对象的设计原则,为开发者提供了丰富的API,使得在Windows环境下开发图形...
在本项目中,我们关注的是一个教务管理系统的UML(统一建模语言)建模。UML是一种标准的建模工具,它用于可视化、规格化和构建软件系统,特别是大型复杂系统。在这个选课管理系统中,我们通过多种UML图来描绘系统的...