2016-12-23 14 views
5

Po prostu proste pytanie o api WIN32.
Mam funkcję, która łączy się z MySQL przy użyciu interfejsu API MySQL C, i która pobiera powiązaną listę wskaźników do struktur.Czy WINAPI automatycznie zwolni pamięć podłączoną do elementów sterujących?

Tak więc w oknie dialogowym wywołania zwrotnego wypełniam formant ListView przez te elementy i dołączam każdy wskaźnik struktury do wiersza w ListView.

Pytanie brzmi: mam uwolnić kursory po usunięciu wszystkich pozycji z ListView przez LVM_DELETEALLITEMS na przykład po kliknięciu przycisku odświeżania?
A może WIN32 API uwalnia je dla mnie?

+6

W przypadku wywołań WinAPI użytkownik jest odpowiedzialny za wyczyszczenie zasobów dołączonych do elementów sterujących. – t0mm13b

+0

Dzięki temu jest tak precyzyjne i jasne –

+0

Chciałem potwierdzić czy naprawdę robisz to w C, a nie w C++? To jest trudne. W C musisz być jeszcze bardziej skrupulatny w zarządzaniu pamięcią. –

Odpowiedz

5

Podczas usuwania elementów z widoku listy, jesteś odpowiedzialny za czyszczenie wszelkich zasobów, do których odwołują się przez lParam członka struktury LVITEM. Windows API nie zrobi tego za Ciebie.

W rzeczywistości Windows API nie może tego zrobić dla ciebie. Nie ma możliwości sprawdzenia, czy wskaźnik wskazuje na pamięć przydzieloną przy użyciu new, malloc, IMalloc lub jakiegokolwiek innego przydziału. A może wskaźnik wskazuje na statycznie przydzieloną tablicę i nie trzeba jej całkowicie zwalniać. Lub może nie być nawet wskaźnikiem, ale raczej wartością mieszającą do sortowania lub indeksem do innej struktury.

Ponieważ tylko Ty wiesz, jak interpretować lParam, ponosisz pełną odpowiedzialność za zarządzanie zasobami. W przeciwieństwie do wersji some opinions, C++ nie pomoże ci tutaj.

Powiązane problemy