Slynx napisał(a):(nie wiem jak reaguje fopen na próbę otwarcia otwartego pliku)
To w sumie nieistotne dla tego problemu, ale nie otworzy otwartego pliku.
Gdy zostanie wywołany błąd uniemożliwiający kontynuowanie wewnątrz lokalnego bloku (czyli naszej funkcji) powinien się uruchomić garbage collector i automatycznie wyrzucić to z pamięci
Slynx napisał(a):I czegoś takiego jak definicji globalnej zrobić nie możesz. Albo deklaracja i definicja wewnątrz funkcja, albo całość jako statyczna.
Slynx napisał(a):Mówisz o wycieku pamięci.... czy aby na pewno ?
Slynx napisał(a):Czy w takim przypadku dojdzie do wycieku pamięci ? Teoretycznie powinno, bo przy tworzeniu nowego obiektu na tej samej deklaracji bez wcześniejszego usunięcia..
Slynx napisał(a):Czy może to jest zrobione tak, że automatycznie usuwa poprzednią zmienną jeśli dochodzi do nowego tworzenia obiektu na tej samej deklaracji ?
To jest jedynie informacja, że "należałoby" się obiektu pozbyć.
Czy w takim przypadku dojdzie do wycieku pamięci ?
Czy może to jest zrobione tak, że automatycznie usuwa poprzednią zmienną jeśli dochodzi do nowego tworzenia obiektu na tej samej deklaracji ?
Taka referencja teoretycznie istnieje tylko na czas trwania pojedynczej iteracji. Co każdy obrót pętli jest tworzona na nowo i ponownie niszczona...
Następna rzecz to to, że obiekt spod lvi* przekazujesz dalej kontrolce listView. A co później dzieje się z obiektem to już sprawa kontrolki, nie Twój problem
- Referencja ? A to z czego wynika ? W całość kodu korzystamy jedynie z naszego "zarządzanego wskaźnika" (czy jak to tam się nazywało), nigdzie nie używamy referencji, a ListView->Items->Add() też nie pobiera referencji, a jedynie ten nasz wskaźnik.*) gwoli ścisłości, lvi to referencja.
Slynx napisał(a):No właśnie to chyba nie jest prawda. Przecież gdy do obiektu cały czas coś dodajesz to obiekt cały czas pozostaje aktywny, a nie ginie i jest tworzony na nowo po każdej iteracji.
C++/CLI uses a "^%" syntax to indicate a tracking reference to a handle. It is similar in concept to using "*&" (reference to a pointer) in Standard C++.
Slynx napisał(a):Przecież gdy do obiektu cały czas coś dodajesz to obiekt cały czas pozostaje aktywny, a nie ginie i jest tworzony na nowo po każdej iteracji.
No właśnie to chyba nie jest prawda. Przecież gdy do obiektu cały czas coś dodajesz to obiekt cały czas pozostaje aktywny,
Mój obiekt (ListViewItem) cały czas istnieje po przekazaniu do ListView. ListView jedynie go odczytuje, dopisuje do swojej kolekcji i zostawia w spokoju.
- Referencja ? A to z czego wynika ?
A w przypadku natywnego następowało zastąpienie adresu w pamięci bez wcześniejszego oczyszczania co skutkowało brakiem możliwość oczyszczenia tego obszaru. O ile dobrze pamiętam....No i po zakończeniu iteracji obiekt staje się nieosiągalny (unreachable), zatem przeznaczony do skasowania, co z dużym prawdopodobieństwem będzie skutkować tym, że przy następnym tworzeniu obiektu tej samej klasy, pamięć zajmowana przez wspomniany obiekt zostanie ponownie wykorzystana (nastąpi finalizacja starego obiektu i konstrukcja nowego na tym samym fragmencie pamięci).
Powrót do Ogólne problemy z programowaniem
Użytkownicy przeglądający ten dział: Google [Bot] i 42 gości