Я бы использовал вектор char в качестве буфера.
std::vector<char> buffer(size);
read(input,&buffer[0],size);
По сути, вы даже не хотите звонить новым, если вам это не нужно.
Вектор предоставляет размерный буфер времени выполнения, который вы можете использовать как массив (буфер).
Самое приятное то, что вектор очищается после себя, и стандарт гарантирует, что все элементы в векторе будут находиться в хранилище. Идеально подходит для буфера.
Или, более того, гарантия:
(&buffer[0]) + size == (&buffer[size])