Тема: Удаление примитивов и очистка памяти
Здравствуйте, уважаемые дамы и господа! Я новичок в ObjectArx, поэтому заранее прошу прощения, если мои вопросы покажутся некорректными либо наивными. Два похожих вопроса.
Первый: Как удалить из памяти AcDb3dSolid* pTempSolid в следующем примере (ни delete pTempSolid, ни acdbFree(pTempSolid) не помогли):
void COctTree::TestMemory1()
{
AcDb3dSolid* pSphere = new AcDb3dSolid;
Acad::ErrorStatus es = pSphere->createSphere(50);
if (es != Acad::eOk)
{
delete pSphere;
return;
}
AddToCurGDb(pSphere);
AcDb3dSolid* pMoveBox = new AcDb3dSolid;
es = pMoveBox->createBox(10, 10, 10);
if (es != Acad::eOk)
{
delete pMoveBox;
return;
}
AddToCurGDb(pMoveBox);
Adesk::Boolean bIsIntersection = Adesk::kFalse;
AcDb3dSolid* pTempSolid = NULL;
for (int i = 0; i < 10000; i++)
{
if( (es = pSphere->checkInterference(pMoveBox,Adesk::kTrue,bIsIntersection,pTempSolid)) != Acad::eOk )
return ;
// Work with pTempSolid
if(pTempSolid)
{
pTempSolid->erase();
acdbFree(pTempSolid);
// delete pTempSolid;
}
}
Второй: Почему при работе следующего примера, а конкретнее, при отработке функции transformBy(), объём занимаемой памяти увеличивается? Как этого избежать?
void COctTree::TestMemory2()
{
AcDb3dSolid* pMoveBox = new AcDb3dSolid;
Acad::ErrorStatus es = pMoveBox->createBox(10, 10, 10);
if (es != Acad::eOk)
{
delete pMoveBox;
return;
}
double dbX = 0;
double dbY = 0;
double dbZ = 0;
AcGeMatrix3d mat;
for (int i = 0; i < 10000; i++)
{
dbX += 0.001;
dbY += 0.001;
dbZ += 0.001;
mat(0,3) = dbX;
mat(1,3) = dbY;
mat(2,3) = dbZ;
pMoveBox->transformBy(mat);
}
acutPrintf("\nComplete...");
delete pMoveBox;
}
Заранее благодарен!