C++类设计的一些心得
C++ 设计 一些 心得
2023-09-14 08:57:59 时间
前段时间一直在重构游戏里面的帮战系统,在重构的过程中几次都放到了外网去测试,结果出了很多问题,死锁一次,漏锁一次(导致coredump)。也正是在这次重构的过程中发现了如何设计健壮的类。
1: 整个的帮战系统主要是有两个类,一个玩家类LeagueBattler,一个战场类leaguebattlefield,分别记录各自的信息;之前的同事在注入进入战场逻辑、玩家被打死的逻辑等过程中,随意让玩家实例访问战场类,我们看下面的例子。
玩家进入帮战的处理逻辑,玩家在进入战场时,应该将对应帮派的参战人数加一。int leaguebattler::enter_scene() leaguefield *field = NULL; this- monitor()- find(this- role_id(),field); if(field == NULL) return -1; field- join_number[this- league_id()] ++; return 0; }
在玩家被打死的处理状态,玩家被打死时,应该将killer所在的帮派加分。
int leaguebattler::die_process() leaguefield *field = NULL; this- monitor()- find(this- role_id(),field); if(field == NULL) return -1; field- mark[this- killer.league_id]++; return 0; }
类似上面例子很多,玩家的进入或者死亡需要更新战场信息的时候,我之前的程序员居然直接去修改帮派战场信息的数据,就是在类似上述的一个函数中造成了宕机。
2: 后来我们对整个设计进行了重构,重构之后第二个例子变成了这个样子。
}
这样就避开了两个类之间的相互访问对方数据。类设计的一个原则就是对自己资源的绝对控制,不能被随意访问,一方面是容易维护、另一反面就是不会出现coredump的问题。
不会出现诸如由于漏锁引起的coredump等问题。
高效学 C++|组合类的构造函数 设计好MyString类后,就可以像使用普通类型一样使用它了。例如,类的对象可以像普通的变量一样作为另一个类的数据成员。
C++ STL学习之【string类的模拟实现】 string 本质上就是一个专注于存储字符的顺序表,使用起来很方便;但在模拟实现 string 时,有许多值得注意的点,下面就来看看 string 类是如何诞生的吧
相关文章
- Modern C++ 最核心的变化是什么?
- C++反射 - 反射信息的自动生成
- C++:set、map的使用及其特性和区别
- 【2022新书】C++软件设计:高质量软件的设计原则和模式
- C++类设计和实现的十大最佳实践
- 在 Cu002FC++ 中反转字符串的不同方法
- C++ 快速理解数组名为何是常指针
- C++特殊类设计
- C++ 数组
- C++ Primer Plus习题及答案-第十三章
- c++的链表-C++链表
- c++面向对象设计(谭浩强)2.3类的成员函数
- C++11 unique_ptr智能指针详解
- C++类模板(模板类)与友元详解
- C++函数重载的深入解析
- C++设计类不能被继承的方法实例讲解
- C++基于对话框的程序的框架实例
- C/C++实现对STORM运行信息查看及控制的方法
- C++虚函数的实现机制分析