Перегружена только одна функция в паре функций выделения-изъятия
Этот дефект возникает при перегрузке operator new
но не перегружайте соответствующий operator delete
, или наоборот.
Обычно вы перегружаете operator new
для выполнения некоторой бухгалтерии в дополнение к выделению памяти в свободном хранилище. Если вы не перегрузите соответствующий operator delete
Вероятно, вы опускали некоторую соответствующую бухгалтерию при снятии памяти.
Дефект может также указывать на ошибку кодирования. Например, вы перегрузили форму размещения operator new[]
:
void *operator new[](std::size_t count, void *ptr);
operator delete[]
:void operator delete[](void *ptr);
void operator delete[](void *ptr, void *p );
При перегрузке operator new
, убедитесь, что вы перегрузите соответствующий operator delete
в тех же возможностях и наоборот.
Например, в классе, если вы перегрузите форму размещения operator new
:
class MyClass { void* operator new ( std::size_t count, void* ptr ){ ... } };
operator delete
:class MyClass { void operator delete ( void* ptr, void* place ){ ... } };
Как найти operator delete
соответствующий operator new
, см. страницы с описанием для operator new
и operator delete
.
Группа: Хорошая практика |
Язык: C++ |
По умолчанию: Off |
Синтаксис командной строки
: MISSING_OVERLOAD_NEW_DELETE_PAIR |
Влияние: Низкое |
Find defects (-checkers)
| Invalid deletion of pointer
| Invalid free of pointer
| Memory leak
| Mismatched alloc/dealloc functions on Windows