является следующим конструктором в здравом уме ..
Вы продлеваете время жизни Image
благодаря деструктору, поэтому data
остается в силе.
Таким образом, вы правы в этом вопросе ...
Но , вектор может перераспределить, аннулируя буфер.
Поэтому полученный код небезопасен.
Вы можете хранить std::shared_ptr<std::vector<uint8_t>> mData;
на всякий случай.
.. и правильный путь
У нас лучше / проще с псевдонимом конструктора из std::shared_ptr
:
struct PtrImage
{
std::shared_ptr<std::vector<uint8_t>> mData;
PtrImage (std::shared_ptr<Image> pIm) : mData(pIm, &pIm->GetData()) {}
};
Таким образом, информация о владельце PtrImage::mData
передается pIm
.
Примечание: Я предполагаю, что вектор, возвращаемый GetData()
, имеет то же (или большее) время жизни, что и Image
(как для VecImage
). если это не связанный вектор (от другого объекта), то у вас не будет решения.
Как отмечено в комментарии, вектор не должен перераспределять ни