CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Czy taki kod jest prawidłowy ?

Czy taki kod jest prawidłowy ?

dział ogólny

Czy taki kod jest prawidłowy ?

Nowy postprzez Corvis » piątek, 23 maja 2014, 11:10

Witam,

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; // <---- !!
}
 


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;
 


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ą.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Czy taki kod jest prawidłowy ?

Nowy postprzez polymorphism » piątek, 23 maja 2014, 14:33

Jest wyciek. Naucz się używać inteligentnych wskaźników:
KOD cpp:     UKRYJ  
std::auto_ptr<TBitmap> __fastcall TObslugaZasobow::obrazekBMP(unsigned int ID)
{
        std::auto_ptr<TBitmap> bmp( new TBitmap() );
        ...

        return bmp;
}

...

Bitmap->Assign( z->obrazekBMP(_RS_ID_IMG_FLAGA_PL).get() );
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2157
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Czy taki kod jest prawidłowy ?

Nowy postprzez Corvis » piątek, 23 maja 2014, 14:41

dzięki :-)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 15 gości

cron