Mam moduł do wyczytywania danych z zasobów ( min. obrazków BMP )
KOD cpp: UKRYJ
TBitmap* __fastcall TObslugaZasobow::obrazekBMP(unsigned int ID) {
TBitmap *bmp = new TBitmap();
HRSRC rsrc = FindResource(HInstance, MAKEINTRESOURCE(ID), RT_RCDATA);
DWORD Size = SizeofResource(HInstance, rsrc);
HGLOBAL MemoryHandle = LoadResource(HInstance, rsrc);
if(MemoryHandle != NULL) {
BYTE *MemPtr = (BYTE *)LockResource(MemoryHandle);
TMemoryStream *stream = new TMemoryStream();
stream->Write(MemPtr, Size);
stream->Position = 0;
bmp->LoadFromStream(stream);
bmp->Transparent = true;
delete stream;
}
return bmp; // <---- !!
}
TBitmap *bmp = new TBitmap();
HRSRC rsrc = FindResource(HInstance, MAKEINTRESOURCE(ID), RT_RCDATA);
DWORD Size = SizeofResource(HInstance, rsrc);
HGLOBAL MemoryHandle = LoadResource(HInstance, rsrc);
if(MemoryHandle != NULL) {
BYTE *MemPtr = (BYTE *)LockResource(MemoryHandle);
TMemoryStream *stream = new TMemoryStream();
stream->Write(MemPtr, Size);
stream->Position = 0;
bmp->LoadFromStream(stream);
bmp->Transparent = true;
delete stream;
}
return bmp; // <---- !!
}
Funkcja ta zwraca mi nowy obiekt TBitmap następnie w kodzie w innym miejscu mam wywołanie:
KOD cpp: UKRYJ
TObslugaZasobow *z = new TObslugaZasobow();
Bitmap->Assign(z->obrazekBMP(_RS_ID_IMG_FLAGA_PL));
delete z;
Bitmap->Assign(z->obrazekBMP(_RS_ID_IMG_FLAGA_PL));
delete z;
Moje pytanie jest takie czy nie ma tutaj wycieku pamięci i czy taka konstrukcja kodu jest prawidłowa ?? Chodzi mi o tworzenie nowego obietku TBitmap w funkcji i zwracanie go funkcją.