C ++ ile yazılmış birkaç istisna dışında olduğumu biliyorum ama istisnalar kullanmıyorum. C ++ 'da bellek ayırma arızasının ele alınması genellikle std::bad_alloc
istisna etrafında inşa edildiğinden , bu oyunlar böyle bir hatayı nasıl ele alır?
Basitçe çöküyorlar mı yoksa bellek yetersiz bir hatayı işlemek ve kurtarmanın başka bir yolu var mı?
std::terminate
, hepsi bu. Ancak aynı kısıtlama altında tahsisat, bir istisna atmak yerine boş bir gösterici döndürebilir ve bu sonuç ayrı ayrı kontrol edilebilir ve kullanılabilir.
ClassName variableName = new(nothrow) ClassName();
( açıkça sınıf ismini, değişken ismini, vb. Değiştirmek ). Sonra, tahsis başarısız olursa, if(!variableName)
hatanın bir try-catch istisna bloğu olmadan ele alınmasına izin verdiğini söyleyerek tespit edebilirsiniz . Bellek gibi bir fonksiyonunu kullanarak tahsis edilir Benzer şekilde, malloc()
, calloc()
ayırmaya, sonra vb arızaları aynı kullanılarak tespit edilebilir if(!variableName)
bir deneyin-yakalamak gerek kalmadan bir yöntem. Oyunların bu hataları nasıl ele aldığına gelince, o noktada, çarpışıp çarpmamaya karar vermek oyunun geliştiricisine kalmış.