Если проект измерил, или неразмерная версия оператора 'удаляют' глобально заданный, то и измеренные и неразмерные версии должны быть заданы.
Если проект измерил, или неразмерная версия оператора 'удаляют' глобально заданный, то и измеренные и неразмерные версии должны быть заданы.
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