TEnGinE Version-0.1 Build-4 更新日志
发布日期 : 2022-04-29 23:48
更新类型: Bug修复与代码质量优化
概述
Build-4 是在 Build-3 基础上的维护性更新,主要聚焦于修复关键 Bug 和提升代码健壮性。本次更新解决了单例模式实现错误、随机数生成缺陷以及头文件管理问题,为引擎后续开发奠定了更坚实的基础。
详细变更
1. UniqueID 系统修复 (Tanxl_UniqueID.h)
问题修复:
| 问题类型 | 描述 | 修复方案 |
|---|---|---|
| 严重Bug | GetIdGenerator() 返回局部变量引用 |
改为 static UniqueIdBase UNIBase; 静态局部变量 |
| 类型警告 | srand(time(0)) 类型不匹配 |
改为 srand(static_cast<unsigned int>(time(0))) |
| 逻辑错误 | 循环产生15位ID但索引从1开始 | 改为 for (int i = 0; i < 15; i++) |
| 格式错误 | ID开头会产生多余分隔符 "-" | 添加条件 && i != 0 |
| 未定义行为 | 构造函数/析构函数无实现体 | 添加空实现 {} |
| 赋值错误 | 赋值操作符未返回对象 | 改为 return *this; |
修复前代码:
cpp
static UniqueIdBase& GetIdGenerator()
{
UniqueIdBase UNIBase; // 局部变量,函数返回后失效
return UNIBase;
}
srand(time(0));
for (int i = 1; i <= 15; i++) // 索引从1开始 会导致生成的字符少一位
if (i % 5 == 0) Data += "-";
修复后代码:
cpp
static UniqueIdBase& GetIdGenerator()
{
static UniqueIdBase UNIBase; // 静态局部变量,生命周期正确
return UNIBase;
}
srand(static_cast<unsigned int>(time(0)));
for (int i = 0; i < 15; i++)
if (i % 5 == 0 && i != 0) Data += "-"; // 去掉开头分隔符
2. 头文件管理系统化改进
Utils.h - 添加包含保护
为所有外部库头文件添加 #ifndef/#define 保护,防止重复包含:
cpp
#ifndef GL_GLEW_H
#define GL_GLEW_H
#include <GL\glew.h>
#endif
#ifndef GLFW_GLFW3_H
#define GLFW_GLFW3_H
#include <GLFW\glfw3.h>
#endif
// ... 其他头文件同理
Utils.cpp - 清理冗余包含
变更前 : 直接包含所有系统头文件(与 Utils.h 重复)
变更后 : 仅包含 Utils.h,依赖其传递包含
cpp
// Build-3
#include <GL\glew.h>
#include <GLFW\glfw3.h>
#include <SOIL2\soil2.h>
// ... 多个重复包含
#include "Utils.h"
// Build-4
#include "Utils.h"
3. OpenGL 渲染模块改进 (Tanxl_OpenGL_Draw.h)
添加头文件包含保护
cpp
#ifndef TANXL_INSERTACTION_H
#define TANXL_INSERTACTION_H
#include "Tanxl_InsertAction.h"
#endif
取消全局 using namespace std
变更 : 移除 using namespace std;,改为显式 std:: 前缀
cpp
// Build-3
using namespace std;
string Tag = "State[" + to_string(i) + "]";
cout << "LEFT_PUSHED! ..." << endl;
// Build-4
std::string Tag = "State[" + std::to_string(i) + "]";
std::cout << "LEFT_PUSHED! ..." << std::endl;
优势:
- 避免命名空间污染
- 提高代码可读性和可维护性
- 符合大型项目编码规范
4. 主程序调整 (main.cpp)
| 变更项 | Build-3 | Build-4 |
|---|---|---|
| 新增包含 | - | #include "Tanxl_UniqueID.h" |
| 网格大小 | 5 × 5 | 3 × 3 |
技术债务清理
本次更新解决了以下技术债务:
- 单例模式正确性 - 修复了可能导致悬垂引用的严重问题
- 随机数生成器 - 确保每次调用
Generate()产生不同随机种子 - 跨平台兼容性 - 类型转换更严格,提升可移植性
- 编译效率 - 减少头文件重复解析
文件变更清单
| 文件 | 变更说明 |
|---|---|
Tanxl_UniqueID.h |
单例实现、随机数、ID格式 |
Utils.h |
添加头文件包含保护 |
Utils.cpp |
移除重复包含 |
Tanxl_OpenGL_Draw.h |
添加保护、规范命名空间 |
main.cpp |
添加头文件、调整参数 |
Wild_Chicken_Programing /// TANXL 2026/03/25