Если проект имеет размерную или негабаритную версию оператора '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