Объявленные пользователями пустые деструкторы предотвращают автоматическую генерацию конструкторов перемещения и перемещают операторы присваивания
Этот дефект происходит, когда определение класса содержит объявленный пользователями деструктор с пустым или =default
определение и не объявляет обоих конструктор перемещения и перемещает оператор присваивания. Например:
class aClass { public: ~aClass() noexcept {} // Empty body }; class bClass { public: ~bClass() = default; };
=delete
.Пустой деструктор не отмечается если:
Деструктор является частным или защищен.
Деструктор объявляется виртуальный или итоговый.
Деструктор заменяет базовый класс чистый виртуальный деструктор.
Экземпляры этого класса могут быть излишне скопированы в ситуациях, где операция пересылки была бы возможна. Скопируйте операции, являются более дорогими, чем операции пересылки и может повлиять на производительность.
Попробуйте одно из этих решений:
Удалите пустой деструктор, если это возможно. Если класс не имеет деструктора, компилятор генерирует деструктор, который является по существу пустым деструктором, который вы явным образом объявили.
Если вы не можете удалить деструктор, добавьте явного конструктора перемещения и переместите оператор присваивания в определение класса. Используйте =default
синтаксис, чтобы разъяснить, что определения компилятора конструкторов перемещения и перемещают операторы присваивания, используется.
class aClass { public: ~aClass() noexcept = default; aClass(aClass&& ) = default; aClass& operator=(aClass&& ) = default; };
Группа: Производительность |
Язык: C++ |
Значение по умолчанию: 'off' |
Синтаксис командной строки:
EMPTY_DESTRUCTOR_DEFINED |
Удар: высоко |