Выпуск и приведение данных unique_ptr к другому без копирования - PullRequest
1 голос
/ 23 апреля 2019

У меня есть unique_ptr массива чисел с плавающей точкой, который я хотел бы изменить на unique_ptr массива uint8_t в своей функции. Другими словами, unique_ptr<float[]> -> unique_ptr<uint8_t[]>.

Это то, что я пробовал

void my_function(std::unique_ptr<float*> data) {
    std::unique_ptr<uint8_t*> converted_data(reinterpret_cast<uint8_t*>(data.release()));

    // ...
    // Processing converted_data ...
}

Поскольку я получаю эту ошибку: no matching constructor for initialization of 'std::unique_ptr<uint8_t *>', мне было интересно, возможно ли достичь этой цели без копирования данных.

1 Ответ

1 голос
/ 23 апреля 2019

Вы переводите на несовместимый тип.

data.release () имеет тип float **, так как он возвращает необработанный указатель на то, что было в unique_ptr (в данном случае float *). Вместо этого вы должны привести к uint_8t ** (хотя это все еще выглядит как плохая идея).

...