Если проект имеет размерную или негабаритную версию оператора 'delete', глобально определенную, то должны быть определены как размерную, так и негабаритную версии
Если проект имеет размерную или негабаритную версию оператора 'delete', определенную глобально, то должны быть определены как размерную, так и негабаритную версии.
Стандарт C++ 14 задает размерную версию operator delete. Для образца, для негабаритного operator delete с этой подписью:
void operator delete (void* ptr);
void operator delete (void* ptr, std::size_t size);
operator delete.Стандарт утверждает, что если обе версии operator delete существует, необходимо вызвать версию размера, поскольку она обеспечивает более эффективный способ удаления памяти. Однако в некоторых случаях, например, для удаления неполных типов, используется негабаритная версия.
Если вы перегружаете негабаритную версию operator deleteнеобходимо также перегрузить версию размера. Обычно вы перегружаете operator delete для выполнения некоторой бухгалтерии в дополнение к освобождению памяти в бесплатном хранилище. Если вы перегружаете нерациональную версию, но не размер, то любая бухгалтерия, выполняемая в одной версии, будет опущена из другой версии. Это упущение может привести к неожиданным результатам.
Шашка помечает ситуации, когда негабаритная версия operator delete существует, но соответствующий размер версии не определен, или наоборот.
Проверка включена, только если вы задаете версию C++ C++ 14 или более позднюю. См. C++ standard version (-cpp-version).
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
| Группа: Библиотека языковой поддержки |
| Категория: Необходимый, Автоматизированный |
Check AUTOSAR C++ 14 (-autosar-cpp14) | Invalid deletion of pointer | Invalid free of pointer | Memory leak | Mismatched alloc/dealloc functions on Windows | Missing overload of allocation or deallocation function