Как известно, по стандарту operator new должен кидать исключение при невозможности выделить память.
Однако есть реализации, которые возвращают в этом случае 0 (для совместимости с legacy кодом). Напимер, VC6.
Вопрос:
Есть ли возможность определить какой оператор new (стандартный или нет) будет использован в compile-time?
то есть хочется вроде тогоЖ
void* allocate(size_t count) /*throw std::bad_alloc*/
{
void* p = ::operator new(count);
#ifndef STANDARD_NEW
if (!p) throw std::bad_alloc();
#endif
return p;
}
Просто без #ifndef будет лишняя проверка в runtime.
Или я занимаюсь premature optimization?
Или может просто запользовать (std::nothrow) new?