Почему VC ++ C4150 (удаление указателя на неполный тип) только предупреждение?

Я имел некоторый успех с HtmlUnit в Java. Это - простая платформа для записи модульных тестов на веб-UI, но одинаково полезный для очистки HTML.

11
задан 2 revs 13 August 2009 в 12:51
поделиться

3 ответа

Поскольку стандарт говорит, что это законно, но опасно: 5.3.5

Если удаляемый объект неполный тип класса в точке удаление и полный класс имеет нетривиальный деструктор или функция освобождения, поведение undefined.

12
ответ дан 3 December 2019 в 06:22
поделиться

Это допустимо в C ++, хотя зачастую это плохая идея.

Грубо говоря, уровень предупреждения 1 относится к типу «вы можете быть удивлены, но я проигнорировал то, что вы там сказали», и несколько выбранных операторов, в которых сгенерированный код, скорее всего, неверен и подвержен сбоям.

Таким образом, WL 2 является подходящим, так как это законно и во многих сценариях полностью нормально удалить неполный тип.

Конечно, это рассуждение является просто обоснованным предположением. Возможно, Microsoft бросила кости, чтобы назначить этот уровень предупреждения.

2
ответ дан 3 December 2019 в 06:22
поделиться

Это предупреждение появляется в результате предварительного объявления. Таким образом, компилятор распознал, что это структура / класс, но не уверен в вызове деструктора.

Смысл предупреждения, скорее всего, связан со вторым проходом анализа кода с помощью msvc. Когда последний класс разрешен, компилятор может принять решение, существует ли деструктор.

5
ответ дан 3 December 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: