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_alloc
wyją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::terminate
i 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.