#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]
Учитывая следующий код, включающий оператор new[] и различные неправильные версии delete: [code]#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) в выражении удаления массива, в качестве первого аргумента.
Извините, я ничего не понимаю в что. Я просто нутром чувствую, что это может быть актуально.