Пользовательские реализации функций динамического выделения и удаления памяти должны отвечать семантическим требованиям, указанным в соответствующем пункте «Необходимое поведение» стандарта 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 также подсвечивает местоположение броска в вашем коде.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Библиотека языковой поддержки |
Категория: Необходимый, Автоматизированный |