W oryginalnej implementacji każde wywołanie funkcji 'CreateWhisper' z identycznym argumentem 'c_szName' skutkowało utworzeniem nowego obiektu typu 'CWhisper'. Następnie obiekt ten był dodawany do mapy. Ta praktyka otwierała możliwość nadpisania już istniejących obiektów bez ich wcześniejszego usunięcia, co stwarzało ryzyko potencjalnych wycieków pamięci.
Rozwiązanie: Implementacja Smart Pointerów
Zdecydowałem się zastosować inteligentne wskaźniki, dokładniej mówiąc std::unique_ptr, jednak tylko w kontekście mapy m_WhisperMap. Nie są one używane jako wartości zwracane przez funkcję. Dzięki użyciu std::unique_ptr w mapie, zarządzanie pamięcią obiektów typu CWhisper jest teraz automatyczne i znacznie bezpieczniejsze. Kiedy element jest usuwany z mapy, odpowiadający mu std::unique_ptr automatycznie zwalnia zajmowaną pamięć. Wartość zwracana przez funkcję CreateWhisper to nadal surowy wskaźnik, ale jego zarządzanie pamięcią jest kontrolowane przez std::unique_ptr przechowywany w mapie. To podejście eliminuje ryzyko wycieków pamięci.
Cześć, 🖐️
Wprowadzenie
W oryginalnej implementacji każde wywołanie funkcji 'CreateWhisper' z identycznym argumentem 'c_szName' skutkowało utworzeniem nowego obiektu typu 'CWhisper'. Następnie obiekt ten był dodawany do mapy. Ta praktyka otwierała możliwość nadpisania już istniejących obiektów bez ich wcześniejszego usunięcia, co stwarzało ryzyko potencjalnych wycieków pamięci.
Rozwiązanie: Implementacja Smart Pointerów
Zdecydowałem się zastosować inteligentne wskaźniki, dokładniej mówiąc std::unique_ptr, jednak tylko w kontekście mapy m_WhisperMap. Nie są one używane jako wartości zwracane przez funkcję. Dzięki użyciu std::unique_ptr w mapie, zarządzanie pamięcią obiektów typu CWhisper jest teraz automatyczne i znacznie bezpieczniejsze. Kiedy element jest usuwany z mapy, odpowiadający mu std::unique_ptr automatycznie zwalnia zajmowaną pamięć. Wartość zwracana przez funkcję CreateWhisper to nadal surowy wskaźnik, ale jego zarządzanie pamięcią jest kontrolowane przez std::unique_ptr przechowywany w mapie. To podejście eliminuje ryzyko wycieków pamięci.
Sharegon najlepsze forum pamiętajcie 😁👍
Implementacja:
📁 Lokalizacja pliku: 'UserInterface -> PythonChat.cpp'
🔍 Szukaj
♻️ Zamień
🔍 Szukaj
♻️ Zamień
🔍 Szukaj
♻️ Zamień
🔍 Szukaj
♻️ Zamień
🔍 Szukaj
♻️ Zamień
📁 Lokalizacja pliku: 'UserInterface -> PythonChat.h'
🔍 Szukaj
♻️ Zamień
🔍 Szukaj
♻️ Zamień