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