std::bad_alloc est-elle bien utile…
Je viens de faire un test tout simple afin de vérifier/modifier certaines habitudes de codage, du genre:
Code:
1 2 3 4 5 6 7 8 9 10
| try
{
voidptr = ::operator new(stupid_big_value);
if (voidptr)
...;
}
catch (std::bad_alloc &)
{
...
} |
Sous Windows et Visual Studio 2015, machine avec 8GB de mémoire physique, j'ai alloué quelques terrabytes...
Code:
stupid_big_value = 8ull * 1024 * 1024 * 1024 * 65536;
... Et aucune exception n'est levée 8O
Certains diront que c'est normal, la mémoire (virtuelle) est réservée mais non commitée.
Je n'ose pas faire un memset(voidptr, 0, stupid_big_value), mais ce serait amusant de voir quand le système se fige...
En bref, à quoi bon perdre son temps à essayer de récupérer un std::bad_alloc ou vérifier la nullité d'un pointeur après allocation, si, à priori, la mémoire est toujours "allouée".