Это не имеет смысла.Вы пытаетесь «взломать» ошибки, применяя произвольные приведения.
shared_ptr
- это обертка вокруг указателя на динамически размещаемые объекты.Он управляет их динамическим временем жизни.
array
- это обертка вокруг массива с длительностью автоматического хранения .Обертываемый массив uint8_t
не является динамически выделяемым блоком памяти.
Таким образом, это преобразование совершенно неуместно и приведет к неопределенному поведению ... и даже если вы сможете его скомпилировать.В общем, используйте приведения C ++, такие как static_cast
, что приводит к ошибкам при неправильных преобразованиях, подобных этому, в отличие от C-бросков.
(Соблазнительно использовать C-приведения, чтобы он "просто работал", нона самом деле то, что вы обычно делаете, это зарываете голову в песок и поете «аааа», а ваш код рассыпается в бессмыслицу.)
Почему бы просто:
ByteBuffer b(buffer.data(), buffer.size());
Если ByteBuffer
действительно требуется shared_ptr
в качестве входных данных, тогда вам придется либо хранить данные в -контролируемом *1023* динамическом блоке памяти для начала, либо скопировать его в один для этогоработа.