|
Assign이 된다는 가정이 없어도 문법상 오류나 메모리 누수는 보이지 않는군요
Assign이 된다는 이야기는 도움말에 있지 않아 잘은 모르겠구요
예상에는 저렇게 사용하면 해당 이미지를 사용할 때 접근오류가 날것 같군요
TList와 계념은 같다 보시면 됩니다.
생성한 메모리 포인터를 등록하고 리스트에서 제거하기전 해당 메모리를 해제해줘야하는거지요
델파이는 사용할 줄 몰라서 모르겠네요
하지만 대부분 언어의 기본은 같지 않을까요~?
부족한 답변 죄송합니다. 제가 좀 부족해서리..
김성연 님이 쓰신 글 :
: 아 답변 감사드립니다.
: 제가 정신없이 질문을 올렸었네요.
:
: 메모리 누수에 관련된 글입니다.
: 다음과 같은 코딩을 하였는데, 메모리 누수가 안생기는지 봐주세요.
: {
: Graphics::TBitmap *pBmp = new Graphics::TBitmap;
: pBmp->LoadFromFile("aaa.bmp");
: IL->Add( pBmp, 0 );
: delete pBmp; // Add 함수에서 new와 Assign이 일어난다는 가정하에 delete
: }
: {
: IL->Delete(0); // Delete 함수에서 delete 가 일어난다는 가정하에 따로 GetBitmap으로 가져와 삭제 안함
: }
:
: 메모리 누수가 일어나지 않게 하려면 위와같이 하는 게 맞는지요.
: TList에서는 Delete시에 일일이 동적 해제를 해주고 TList->Delete(0);을 해주잖아요.
: 혹시 델파이에서도 TList를 쓰면 동적 해제를 빌더처럼 해주어야 하나요?
:
: 수야!╋ 님이 쓰신 글 :
: : 소스의 분석을 요청하신거 같군요...
: :
: : 어려운 질문은 아닐거 같은데 답변이 없는거 보니.. ㅡ,.ㅡ;
: :
: : (아실꺼라 생각되지만 전체적인 요약을 위해 일일이 쓰겠습니다.)
: :
: : Graphics::TBitmap *pBmp = new Graphics::TBitMap;
: : 이부분은 TBitmap형의 pBmp라는 놈에게 TBitmap을 생성하라는 소리지요?
: :
: : IL->Add(pBmp,NULL);
: : 이부분의 IL이 ImageList가 맞겠지요..
: : 이미지 리스트에 pBmp라는 놈의 포인터를 등록한것입니다.
: :
: : 다른함수부...
: :
: : Graphics::TBitmap *pBmp;
: : 이부분은 메모리를 생성한것이 아니라 TBitmap에 있는 클래스로 선언하여
: : 내부변수나 함수를 그대로 사용하기 위한 목적입니다.
: :
: : IL->GetBitmap(0, pBmp);
: : 이부분은 처음에 메모리를 생성하였던 놈의 포인터를 갖고있는 녀석중 0번째에 있는 놈의 포인터를
: : 받는 부분입니다. 절대적으로 Assign이 아니라 그냥 포인터 대입인것 같습니다.
: : 빌더가 설치안된 컴이라 확인이 안되는 군요 ㅋㅋㅋ
: :
: : delete pBmp;
: : 이부분은 처음에 생성한 메모리를 제거하기 위한 부분입니다.
: : 따라서 Assign이 아니라 포인터 대입이 맞는거 같지여?
: :
: : IL->Delete(0);
: : 이부분은 아마도 Loop문을 돌면서 제거할것 같군요
: : 이미지 리스트가 갖고있는 첫번째 메모리 포인터 주소를 지우는 것입니다.
: : 실제 메모리 영역을 delete 하는것이 아니라
: : 처음에서 Add 시켜줄떄 받은 메모리 주소값만 이미지리스트에서 삭제하는 것입니다.
: :
: : 이해가 조금 되시는 지요?
: :
: : 이해가 되실때까지 읽어보심이 좋을듯 판단됩니다.
: :
: : 안되신다면 다시 리플 달아주세요~
: :
: :
: : 김성연 님이 쓰신 글 :
: : : Graphics::TBitmap *pBmp = new Graphics::TBitmap;
: : : IL->Add(pBmp,NULL);
: : :
: : : ...
: : :
: : : 다른 함수
: : : Graphics::TBitmap *pBmp;
: : : IL->GetBitmap (0, pBmp);
: : : delete pBmp;
: : : IL->Delete(0);
: : :
: : : 웬지 GetBitmap() 호출시에 Assign이 된다는 얘기같던데요.. 헬프 찾아서 보니까요.
: : : 그러면 위처럼 해주면 안되지 않나요?
: : : IL->Delete(0); 해주면 알아서 되나요?
: : : TList와는 달리 타입을 알고 있어서 그런가요?
: : : 아니면 Add 해주고 바로 delete 를 해줘야 하는 건가요?-
|