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
This commit is contained in:
1 parent
03bbe08b76
commit
41397130e2
15 files changed
+108
-89
No files matched your search
@@ -360,6 +360,8 @@ public:
|
||||
void AddSubPrimObj(AecEqui::XPrimData* p);
|
||||
void RemoveSubPrimObj(int nIndex);
|
||||
void RemoveSubPrimObjByID(int nSubID);
|
||||
//释放全部几何单元(m_arSubPrimPtrs 里的 XPrimData 及其 m_pData)
|
||||
void FreeSubPrimData();
|
||||
|
||||
void AddTransform(const AcGeMatrix3d& xform);
|
||||
void AddTransform(const AcGeVector3d& vtMove);
|
||||
|
||||
@@ -2538,30 +2538,19 @@ namespace AecEqui
|
||||
}
|
||||
~XPrimData()
|
||||
{
|
||||
releaseData();
|
||||
for (size_t i(0); i < m_Combins.size(); ++i)
|
||||
DELETE_PTR(m_Combins[i]);
|
||||
}
|
||||
void releaseData()
|
||||
{
|
||||
if (!m_pData) return;
|
||||
switch (m_eType)
|
||||
{
|
||||
case AecEqui::kNewExtrude:
|
||||
case AecEqui::kNewRevolve :
|
||||
case AecEqui::kNewLoft:
|
||||
case AecEqui::kRevitSweep:
|
||||
case AecEqui::kNewSweep:
|
||||
case AecEqui::kRevitCombination:
|
||||
case AecEqui::kExtrude:
|
||||
case AecEqui::kRevolve:
|
||||
delete[] m_pData;
|
||||
m_nSize = 0;
|
||||
break;
|
||||
default:
|
||||
delete m_pData;
|
||||
m_nSize = 0;
|
||||
break;
|
||||
}
|
||||
//m_pData 一律用 new unsigned char[] 分配(dwgInFieldsForXPrim、byJson、
|
||||
//copyXPrimData 以及各命令模块的 setData),元素都是 POD,不含析构,
|
||||
//所以释放规则只有一条:delete[]。不要再按 m_eType 区分。
|
||||
if (m_pData == NULL) return;
|
||||
delete[] (unsigned char*)m_pData;
|
||||
m_pData = NULL;
|
||||
m_nSize = 0;
|
||||
}
|
||||
//基本体数据
|
||||
short m_eType; //单元体类型
|
||||
|
||||
Reference in new issue
Block a user