Нежелательное неявное создание объекта в массиве std::byte VS charC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Нежелательное неявное создание объекта в массиве std::byte VS char

Сообщение Anonymous »

Похоже, что std::byte обычно предназначен для замены использования char в буферах для распределения блоков необработанной памяти.
Но я' Меня беспокоит тот факт, что std::byte может неявно создавать объекты в массиве, а char не может:
"Объекты неявных типов времени жизни также может быть неявно создано: за исключением постоянного оценка, операции, которые начинают жизнь массива типа unsigned char или std::byte, и в этом случае такие объекты создаются в массиве".
Рассмотрим этот пример вручную контролировать выделение памяти и время жизни объекта int:

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

#include 
#include 

int main() {

//OPTION 1: allocate storage with an array of char
//(no objects are created; char cannot implicitly create objects in an array)
char* buffer = (char*)malloc(sizeof(int));

//OPTION 2: allocate storage with an array of std::byte
//(does std::byte implicitly create objects in the array here? it's capable of doing so)
//std::byte* buffer = (std::byte*)malloc(sizeof(int));

//explicitly create an int object, starting its lifetime:
int* ptr = ::new(buffer) int(11);

//explicitly destroy the int object, ending its lifetime:
std::destroy_at(ptr);

//deallocate storage (if this is an std::byte array, should you call their destructors first?):
free(buffer);
}
Если вы хотите выделить необработанную память, чтобы можно было создавать в ней объекты (например, с помощью нового размещения), зачем вам нужно, чтобы std::byte потенциально заполнял буфер с неявно созданными объектами заранее?
Не лучше ли использовать char, чтобы избежать потенциального неопределенного поведения, связанного со временем жизни любого неявно созданного std::byte объекты (случайный доступ к ним за пределами их жизни, забывание уничтожить их перед освобождением памяти и т. д.)?
Мне просто нужен блок необработанной памяти где я могу вручную создавать и уничтожать объекты, а не блок памяти плюс кучу неявных объектов, о которых я никогда не просил, которые могут незаметно привести к неопределенному поведению, пока я пытаюсь использовать блок.
Спасибо.

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

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

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

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

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

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

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