Какой у меня здесь UB, удаляющий массив оператора new[]?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Какой у меня здесь UB, удаляющий массив оператора new[]?

Сообщение Anonymous »

Учитывая следующий код, включающий оператор new[] и различные неправильные версии delete:

Код: Выделить всё

#include 

class Test {
public:
Test()  { std::cout В
выражении удаления массива значение операнда удаления может быть значением нулевого указателя или значением указателя, полученным
[b]из предыдущего выражения нового массива< /strong>.74 Если нет, поведение не определено.

Ну, у меня есть массив из предыдущего нового выражения.
[Примечание: это означает, что синтаксис выражения удаления должен соответствовать типу объекта, выделенного новым, а не синтаксису нового выражения[/b]. — конец примечания]

Побочный вопрос: почему это означает именно это?
Хорошо, у меня есть оператор new[], и в этой заметке говорится, что синтаксис моего удаления может быть другим. Мне не обязательно нужен оператор delete[], но что-то, что соответствует типу объекта.
Побочный вопрос: что является тип моего объекта? Мой указатель p — void*, но void не является типом объекта. Указывает ли p на void[], а void[] является типом объекта?
§ 7.6.2.8 (11)

Для выражения удаления массива
удаляемый объект является объектом массива. Когда выполняется выражение удаления, выбранная функция освобождения
должна быть вызвана с адресом удаленного объекта в выражении удаления одного объекта или с адресом
удаленного объекта, соответствующим образом скорректированным для массива. накладные расходы на выделение (7.6.2.7) в выражении удаления массива,
в качестве первого аргумента.

Извините, я ничего не понимаю в что. Я просто нутром чувствую, что это может быть актуально. 

Подробнее здесь: [url]https://stackoverflow.com/questions/79276532/which-sort-of-ub-do-i-have-here-deleting-array-of-operator-new[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»