Каково точное значение фразы "как будто" в стандарте и как оно работает, когда пользователь может изменять отдельные части поведения.
Вопрос в том, что касается стандарта С++, когда речь идет о нечерной версии operator new
. 18.4.1.1/7 читает (мой акцент):
Эта новая версия оператора new возвращает указатель, полученный , как если бы был получен из обычной версии.
Мое понимание заключается в том, что "как будто" не требует конкретной реализации, если поведение является подходящим. Поэтому, если operator new
был реализован следующим образом (я знаю, что это не совместимая реализация, поскольку нет цикла или использования new_handler, но я сокращаю это, чтобы сосредоточиться на моей проблеме):
// NOTE - not fully compliant - for illustration purposes only.
void *operator new(std::size_t s)
{
void *p = malloc(s);
if (p == 0)
throw std::bad_alloc();
return p;
}
Тогда было бы законно написать версию nothrow следующим образом:
// NOTE - not fully compliant - for illustration purposes only.
void *operator new(std::size_t s, const std::nothrow_t &nt)
{
return malloc(s);
}
Но скажем, что программа заменяет operator new
на использование другого распределителя. "Как будто" означает, что компилятор должен автоматически изменять поведение версии nothrow для использования этого другого распределителя? Требуется ли разработчик заменить как простые, так и нечеткие версии?