Если проект имеет размерную или неразмерную версию оператора «удалить», определенную глобально, то должны быть определены как размерная, так и неразмерная версии
Если проект имеет размерную или неразмерную версию оператора «удалить», определенную глобально, то должны быть определены как размерная, так и неразмерная версии.
Стандарт C++ 14 определяет версию размера operator delete. Например, для неразмерного operator delete с этой подписью:
void operator delete (void* ptr);
void operator delete (void* ptr, std::size_t size);
operator delete.Стандарт гласит, что если обе версии operator delete exist, необходимо вызвать версию размера, поскольку она обеспечивает более эффективный способ освобождения памяти. Однако в некоторых случаях, например, для удаления неполных типов, используется неразмерная версия.
При перегрузке неразмерной версии 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