Znam kilka gier napisanych w C ++, ale nie używających wyjątków. Ponieważ obsługa awarii alokacji pamięci w C ++ jest generalnie oparta na std::bad_allocwyjątku, w jaki sposób te gry radzą sobie z taką awarią?
Czy po prostu ulegają awarii, czy istnieje inny sposób radzenia sobie z błędem braku pamięci?
std::terminatei to wszystko. Ale następnie pod tym samym ograniczeniem alokacja może zwrócić wskaźnik zerowy zamiast zgłaszania wyjątku, a wynik ten można sprawdzić i obsłużyć osobno.
ClassName variableName = new(nothrow) ClassName();( oczywiście zastępując nazwę klasy, nazwę zmiennej itp. ). Następnie, jeśli alokacja nie powiedzie się, możesz to wykryć, mówiąc, if(!variableName)że można obsłużyć błąd bez bloku wyjątku try-catch. Podobnie, jeżeli pamięć jest przeznaczona użyciu funkcji takich jak malloc(), calloc()itp, a następnie awarii przydzielić można wykryć stosując ten sam if(!variableName)sposób bez potrzeby try-haczyk. Jeśli chodzi o sposób, w jaki gry radzą sobie z tymi błędami, to w tym momencie twórcy gry decydują, czy ulegnie awarii, czy nie.