В C++, мы обычно видим и писать код, как,новых никогда не терпит неудачу?
Sample sample=new Sample();
if (sample == NULL)
{
std::cout<<"Memory allocation failed" << std::endl;
}
Но в C#, я редко увидеть это: (по крайней мере, я никогда не видел этого)
Sample sample = new Sample();
if (sample == null)
{
Console.WriteLine("Memory allocation failed\n");
}
Средства, в C#, мы редко проверяем, если new
не удалось или нет. Почему это так? Это имеет какое-то отношение к «В C#, новый никогда не сработает»? Есть ли такая вещь в C#, что new
никогда не терпит неудачу?
Если это не удается, то почему такая «проверка» настолько редка в C#? Я не говорить о OutOfMemoryException
, то есть в конце концов исключение, а не «проверка». Я говорю о стиле кодирования.
«В C++ мы обычно видим и пишем код типа ...» Нет, мы не делаем. Соответствующая стандартам реализация на C++ должна указывать на ошибки в 'new', вызывая исключение' std :: bad_alloc'. Некоторые старые компиляторы C++ вернули нулевой указатель на ошибку в 'new', но теперь это не так. –
Соответствующее новое в C++ никогда не вернет нулевой указатель. Если вы «обычно видите и пишете код наподобие», вы делаете это неправильно. (Вам нужна форма размещения std :: nothrow new для получения возвращаемого нулевого указателя.) –