Пользовательские реализации функций динамического выделения памяти и освобождения должны удовлетворить семантические требования, заданные в соответствующем "Необходимом поведении" пункт из Стандарта C++.
Пользовательские реализации функций динамического выделения памяти и освобождения должны удовлетворить семантические требования, заданные в соответствующем "Необходимом поведении" пункт из Стандарта C++.
Стандарт C++ ([new.delete]) задает определенные необходимые поведения для динамических функций выделения и освобождения. Если вы реализуете глобальную заменяющую функцию выделения или освобождения, которая не удовлетворяет эти семантические требования, другие функции, которые используют необходимые поведения, могут вести себя неопределенным способом.
Например, void* operator new ( std::size_t count )
как ожидают, выдаст bad_alloc
исключение, если этому не удается выделить требуемый объем памяти. Если вы реализуете заменяющую функцию выделения, которая возвращает nullptr
вместо броска функция, которые ожидают, что выделение памяти выдаст на отказе, может попытаться разыменовать нулевого указателя вместо этого.
Polyspace® отмечает эти заменяющие реализации динамических функций выделения и освобождения.
Замена operator new
это возвращает nullptr
когда ожидаемое поведение должно выдать bad_alloc
исключение на отказе.
Замена operator new
или operator delete
тот бросок прямо или косвенно на отказе, когда ожидаемое поведение не должно выдавать. Polyspace также подсвечивает местоположение броска в вашем коде.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: вспомогательная библиотека Языка |
Категория: необходимый, автоматизированный |