Существуют ли случаи из реальной жизни, когда удаление неполного типа не является ошибкой в ​​C ++? - PullRequest
3 голосов
/ 27 октября 2011

Visual C ++ имеет C4150 предупреждение для случаев, когда delete применяется к указателю на неполный тип.

Такие случаи приводят к неопределенному поведению в соответствии со Стандартом.AFAIK в Visual C ++, они приводят к функции operator delete() по умолчанию и не вызывают деструктор, который допускает многочисленные ошибки.

Теперь я мог бы использовать #prarma warning( error : 4150 ) в Visual C ++ для обработки этого предупреждения как ошибки.Я предполагаю, что есть причины, по которым это предупреждение, а не ошибка по умолчанию в Visual C ++.

В каком реальном коде я хотел бы разрешить такие случаи?Почему бы мне не включить это предупреждение в ошибку компилятора?

Ответы [ 2 ]

5 голосов
/ 27 октября 2011

Это не всегда UB.

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

2 голосов
/ 27 октября 2011

Как насчет того, чтобы указатель был 0 (или nullptr в C ++ 11)?delete 0; по определению не работает.

...