Вы можете использовать ::operator new
для выделения фрагмента памяти произвольного размера.
DataType* foo = static_cast<DataType*>(::operator new(sizeof(DataType) * numDataTypes));
Основное преимущество использования ::operator new
над malloc
в том, что оно генерирует ошибку и интегрируется с любыми new_handlers и т. Д. Вам необходимо очистить память с помощью ::operator delete
::operator delete(foo);
Обычный new Something
, конечно, вызовет конструктор, в конце концов, в этом смысл new
.
Одно дело избегать дополнительных конструкций (например, конструктор по умолчанию) или откладывать их по соображениям производительности, другое - вообще пропустить любой конструктор. У меня такое впечатление, что у вас есть код вроде
DataType dt;
read(fd, &dt, sizeof(dt));
Если вы делаете это, вы все равно уже выбрасываете тип безопасности в окно.
Почему вы пытаетесь достичь, не вызывая конструктор?