Может ли оператор delete генерировать исключение или сигнализировать каким-либо другим образом об ошибке во время освобождения памяти?
По-другому возможен ли сбой operator delete
и каково его поведение по умолчанию в этом случае?
И что об этом говорит стандарт ISO?
Например, в ОС Windows - C++ operator new
и operator delete
обычно реализуются через функции HeapAlloc
и HeapFree
. Более поздняя функция возвращает логическое значение, которое ясно указывает на возможность сбоя. Представьте, как на нем будет написано C++ operator delete
:
void operator delete(void *pMem)
{
extern HANDLE hHeap;
extern DWORD dwFlags;
BOOL bSuccee = HeapFree(hHeap, dwFlags, pMem);
//return bSuccee ????????????
}
operator delete
завершать работу с определенным поведением, поскольку в некоторых операционных системах есть средства, позволяющие это делать? Тогда ответ будет таким: потому что C++ работает во многих других операционных системах. - person Frédéric Hamidi   schedule 06.04.2015delete
возвращать что-то или нет, не может зависеть от реализации (тогда у вас будет два разных языка). Если быdelete
возможность бросать или нет, зависела от реализации... Я не думаю, что какие-либо настоящие программы на C++ могли бы работать переносимо. Итак, наименьший общий знаменатель. - person Frédéric Hamidi   schedule 06.04.2015