V1062. Class defines a custom new or delete operator. The opposite operator must also be defined.
Это диагностическое правило основано на пункте R.15 CppCoreGuidelines.
В классе определен оператор 'new' или 'delete', но при этом не определен обратный оператор.
Пример:
class SomeClass
{
....
void* operator new(size_t s);
....
};
Для динамической аллокации объекта такого класса будет использоваться перегруженный оператор 'new', а для удаления – оператор 'delete', определенный по умолчанию.
Для симметрии операций аллокации/деаллокации следует определить также оператор 'delete':
class SomeClass
{
....
void* operator new(size_t s);
void operator delete(void*);
....
};
Также операторы можно пометить как удаленные ('= delete'), если по какой-то причине необходимо запретить аллокацию или деаллокацию для объектов класса.
Пример с запрещенной деаллокацией:
class SomeClass
{
....
void* operator new(size_t s);
void operator delete(void*) = delete;
....
};
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V1062. |