company-desktop
|
f6d701a661
|
fix: 存盘不再清空组合设备的子单元(m_Combins)
dwgOutFieldsForXPrim 里的容错条件写成
m_eType != kRevitCombination || m_eType != kRevitCombination
恒为真,任何单元存盘前都会执行 m_Combins.clear():
- 组合设备(kCombination)写出去就是 0 个子单元,存盘一次几何永久丢失
- clear() 只清 vector 不释放指针,内存里的 XPrimData 全部泄漏
- 存盘是只读语义,原代码却在写盘路径里修改了对象状态
改为按实际有效数量写出,不修改对象状态;跳过 NULL 并单独计数,避免
"写了数量但循环少写一条"造成读写错位。同时删掉定义后未使用的 int num。
没有按原方案把条件改成 &&,也没有在读入端加过滤:m_Combins 只有组合
单元才会非空,写端正确后不存在"非组合类型带子单元"的数据,保留枚举
判断等于把正确性押在类型比较上,和原来的错误同源。
受影响的图纸里组合设备的子单元已经被写没了,无法从 dwg 恢复,不做数据
迁移。文档同步更新 3.1、5.2、5.4、6、8。
|
2026-10-25 10:30:19 +08:00 |
|
company-desktop
|
41397130e2
|
refactor: 统一 XPrimData::m_pData 为字节数组,releaseData 只保留 delete[]
releaseData() 原来按 m_eType 分两路(8 种 delete[],其余 delete),但同一类型
在内存里可能是对象也可能是字节数组:开图、JSON 导入、深拷贝都分配 new byte[],
而对话框里 setData<T> 的 default 分支和几处直接 new 分配的是对象。按类型判断
必然有一半场景不匹配。
- 13 处对象形式分配统一改成 new unsigned char[sizeof(T)],后续 (T*)m_pData
的用法不变
- releaseData() 去掉 switch,只保留 delete[];~XPrimData() 改为先调 releaseData(),
顺带修掉 m_Combins 子单元的 m_pData 泄漏
- AecDbEwEquipment::FreeSubPrimData() 取代 FreeBuffer(CPtrArray&),改成成员函数,
不再需要参数
- 另外三个文件作用域的 FreeBuffer/FreeBuffer2/FreeBuffer3 改名为 FreeEntityArray/
FreeComplexCurveArray/FreeFaceplanArray,并加 static 收回内部链接
- 删除 ReleaseXPrimData,直接 releaseData() + DELETE_PTR
|
2026-10-23 10:29:31 +08:00 |
|
company-desktop
|
03bbe08b76
|
fix: 修复 AecDbEwEquipment 的内存泄漏(夹点数组、几何单元、剖切与投影克隆)
|
2026-10-23 09:57:20 +08:00 |
|
company-desktop
|
55391b8dc8
|
docs: 补 AecDbEwEquipment 内存、缺陷与性能分析
|
2026-10-22 16:31:00 +08:00 |
|