Указатели на неполные типы классов не удаляются
Указатели на неполные типы классов не удаляются.
При удалении указателя на неполный класс невозможно вызвать какой-либо нетривиальный деструктор, который может быть у класса. Если деструктор выполняет операции очистки, такие как освобождение памяти, эти операции не выполняются.
Подобная проблема возникает, например, при понижении канала до указателя на неполный класс (понижающий канал - это переход от указателя на базовый класс к указателю на производный класс). В точке нисходящего вещания связь между базовым и производным классом неизвестна. В частности, если производный класс наследует от нескольких классов, в момент понижения, эта информация недоступна. Нисходящая трансляция не может произвести необходимые корректировки для множественного наследования, и результирующий указатель не может быть удален.
Проверка вызывает дефект при удалении или приведении к указателю на неполный класс. Неполный класс - это класс, определение которого не отображается в точке использования класса.
Например, определение класса Body не виден, когда delete вызывается оператор по указателю на Body:
class Handle {
class Body *impl;
public:
~Handle() { delete impl; }
// ...
};Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Выражения |
| Категория: Обязательно, Автоматизировано |