C ++ 23 Изменения запрещают с использованием динамически выделенного массива в качестве поставщика хранилища?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 C ++ 23 Изменения запрещают с использованием динамически выделенного массива в качестве поставщика хранилища?

Сообщение Anonymous »

Это основной пример использования динамического массива без знака в качестве «хранилища» для типа t. < /p>

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

unsigned char* storage = new unsigned char[sizeof(T)];
T* foo = new(storage) T; // line 2
// use *foo somehow
foo->~T(); //destroy our foo

delete[] storage; // Undefined as of C++23? How else to do it?
после Line2 массив сам все еще жив, потому что он обеспечивает хранилище T the T, который введен в массив, но массив Однако, как мы можем удалить этот массив после того, как мы закончили его, используя указательский хранилище , что является указанием на первый элемент времени вне списка? /> Программа имеет неопределенное поведение, если:
(6.1) Объект будет иметь или имеет тип класса с нетривиальным деструктором, а указатель используется в качестве операнда удаления-экспрессии, < /p>
< /blockquote>
Это не применяется к Unsigned char < /code> не тип класса. Однако, начиная с C ++ 23, это предложение было изменено на < /p>

Программа имеет неопределенное поведение, если: (6.1). Указатель используется в качестве операнда для удаления-экспрессии, < /p>
< /blockquote>
, который теперь не подписал char < /p>. возможно больше использовать характер в качестве хранилища в качестве хранилища? «представление объекта» и поэтому все еще жива, или

Весь базовый. />
, который произошел, хотя это повторное использование и также снова заканчивалось, вызывая ~ t () или

могло бы даже быть возможным, что это было никогда не должно работать с Arrapes, созданным> новым -Экспресс. Не позволяйте нам в любом случае указать требуемое выравнивание?>

Подробнее здесь: https://stackoverflow.com/questions/770 ... e-provider
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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