Только одна функция в паре функции освобождения выделения перегружается
Недостающая перегрузка функции выделения или освобождения происходит, когда вы перегружаете 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