Вы можете унаследовать gsl::span<T>
и удерживать std::unique_ptr<T[]>
template <typename T, typename D = std::default_delete<T>>
struct owning_span : public gsl::span<T>
{
owning_span() {}
owning_span(T* ptr, index_type size, D d = {}) : span(ptr, size), m_ptr(ptr, std::move(d)) {}
owning_span(T* first, T* last, D d = {}) : span(first, last), m_ptr(first, std::move(d)) {}
// other constructors ?
private:
std::unique_ptr<T[], D> m_ptr;
};
Одно примечание: вы все равно можете скопировать конструкции / назначить gsl::span
s из этого, отсекая владение.Не уверен, что это за или против