修复相机 HLR 计算链路上的几处内存泄漏 #76
@@ -771,7 +771,11 @@ namespace
|
||||
break;
|
||||
}
|
||||
|
||||
if (!pSolidAll) return NULL;
|
||||
if (!pSolidAll)
|
||||
{
|
||||
deleteArrayVoidPtrs<AcDbEntity>(arptrs);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (arptrs.isEmpty()) return pSolidAll;
|
||||
|
||||
@@ -1117,6 +1121,8 @@ namespace
|
||||
{ // 如果 ent 是 块参照,它不会有补充实体,结果需要打成块
|
||||
// 块的属性和 pRef 一样
|
||||
AcDbBlockReference *pSubRef = CoreTools::makeBlockReference(subAr, NULL);
|
||||
if (!pSubRef) // 打成块失败时,subAr 里的实体没有被块表接管,需要自己释放
|
||||
deleteArrayVoidPtrs<AcDbEntity>(subAr);
|
||||
subAr.removeAll();
|
||||
if (pSubRef)
|
||||
{
|
||||
@@ -2067,6 +2073,8 @@ void AecDbXCamera::hlrCalc(AcDbObjectIdArray &arIds
|
||||
// 如果实体的PreprocessForHlr函数内,设置了 HLR_CALC,从而影响实体的 Draw3d 函数的返回
|
||||
// 那么,其PreprocessForHlr函数一定要无条件设置回来
|
||||
// rollback 回调用其内部的PreprocessForHlr函数
|
||||
deleteContainerOfArx<AcDbEntity>(arAdditional_all);
|
||||
deleteContainerOfArx<AcDbEntity>(arAxisPtrs);
|
||||
rollback(arIds);
|
||||
return;
|
||||
}
|
||||
@@ -2083,6 +2091,7 @@ void AecDbXCamera::hlrCalc(AcDbObjectIdArray &arIds
|
||||
// 如果裁剪之后,没有结果了,回退实体状态
|
||||
if (result1.empty() && result2.empty())
|
||||
{
|
||||
deleteContainerOfArx<AcDbEntity>(arAdditional_all);
|
||||
rollback(arIds);
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user