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:
company-desktop committed 2026-10-23 10:29:31 +08:00
1 parent 03bbe08b76
commit 41397130e2
15 files changed
+108 -89

No files matched your search

+4 -4
View File
@@ -44,7 +44,7 @@ namespace
}
break;
default:
pXPData->m_pData = new T;
pXPData->m_pData = new unsigned char[sizeof(T)];
::memcpy(pXPData->m_pData, pData, sizeof(T));
pXPData->m_nSize = sizeof(T);
break;
@@ -673,7 +673,7 @@ CSBZWDlg::CSBZWDlg(CWnd* pParent /*=NULL*/)
m_boxData.m_eType = AecEqui::kBox;
m_boxData.m_nID = ::_time32(NULL);
m_boxData.m_pData = new AecEqui::XBOX;
m_boxData.m_pData = new unsigned char[sizeof(AecEqui::XBOX)];
m_boxData.m_iClr = m_clr;
AecEqui::XBox box;
@@ -716,7 +716,7 @@ CSBZWDlg::CSBZWDlg(double dX, double dY, double dZ, CWnd *pParent /*=NULL*/)
m_boxData.m_eType = AecEqui::kBox;
m_boxData.m_nID = ::_time32(NULL);
m_boxData.m_pData = new AecEqui::XBOX;
m_boxData.m_pData = new unsigned char[sizeof(AecEqui::XBOX)];
m_boxData.m_iClr = m_clr;
AecEqui::XBox box;
@@ -932,7 +932,7 @@ Adesk::Int32 CSBZWDlg::AddNozz(DWORD dwSubiD, AcGeVector3d& vtDir, AcGePoint3d&
data.m_nID = ::_time32(NULL);
data.m_iClr = clr;
data.m_pData = new AecEqui::XNozz;
data.m_pData = new unsigned char[sizeof(AecEqui::XNozz)];
::memcpy(data.m_pData, pNozzData, sizeof(AecEqui::XNozz));
data.m_nSize = sizeof(AecEqui::XNozz);
data.m_nActiveInf = -1;