안녕하세요
메인 메뉴중 한 곳은 펼쳐질때 마다 그 곳의 메뉴아이템을 다 지우고,
하위에 새로 메뉴 아이템을 추가합니다. 추가되는 메뉴 아이템들은 서브 메뉴를 가질 수 있습니다.
겉보기는 잘 동작합니다..
이런 과정을 지금 TMenuItem 의 Delete 메소드를 사용해서 지우고 다시 추가하는데요
어플리케이션이 끝날때 Memory Access Violation 에러가 납니다.
아마 내부적으로 컴포넌트들은 가비지 콜렉션이 되는것 같은데 .. 그것과 관련있는듯 합니다.
위의 방법이 잘 못 된건지.. 다른 분들은 메뉴의 동적 구성을 어떻게 하시는지 궁금합니다.
C++ Builder 의 Help 를 보면 TMenuItem 의 Delete 는 메모리상에서는 삭제하지 않는다고
메모리에서 지울라면, Free 메소드를 호출하라고 하고 Free 메소드의 설명은 객체는 알아서 지우니까
Free 호출 하지 말고 Delete 를 호출하라고 합니다..
그리고 메뉴 아이템을 삭제 할때, 각각의 메뉴아이템을 지우는데요,
그 메뉴아이템의 서브 메뉴가 있을때는 상위의 메뉴아이템만을 지우면 알아서 Recursive 하게
Delete 하는 겁니까? 아님 제가 서브 메뉴의 아이템들도 재귀 호출로 삭제 해야 하는 겁니까
현재는 이케 했습니다.
// pParentMenu 하위의 메뉴아이템을 nStartIndex 부터
지우는 루틴입니다.
FreeFavoriteMenu(const TMenuItem
*pParentMenu, const int nStartIndex)
{
if(
pParentMenu->Count <= nStartIndex )
return;
for(int
i=nStartIndex;i<pParentMenu->Count;i++)
{
TMenuItem *pPred =
pParentMenu->Items[i];
pParentMenu->Delete(i);
}
}
제가 아직 빌더의 콤포넌트 개념이 없어서 그런것 같습니다..
이런 간단한걸로 막히고 있습니다.
아시는 분은 답변 주시면 감사하겠습니다.
아.. 그리고 new 로 생성한 콤포넌트들은 delete 해야 하는지
아님 자동으로 지우는지 잘 몰겠습니다.