Qt умный указатель, эквивалентный boost::shared_array?
Хотя существует эквивалент boost::shared_ptr
(QSharedPointer
) Я не смог найти то, что напоминает boost::shared_array
,
Конечно, я мог бы использовать что-то похожее на
QSharedPointer<const std::vector<T> > shared_vector_ptr(new std::vector<T>(
reinterpret_cast<T*>(pBuffer),
reinterpret_cast<T*>(pBuffer+length)
));
но я хотел бы знать, существует ли собственное решение Qt, которое обеспечивает T& operator[](size_t)
и использует delete[]
вместо delete
, Я не хочу использовать boost в этом проекте, поскольку на целевой машине не может быть установлен boost, и проект распространяется по источникам.
Примечание. Я знаю, что могу указать удалитель, используя QSharedPointer::QSharedPointer ( T * ptr, Deleter deleter )
Однако мне не нравится подход, так как компилятор не заставляет вас указывать средство удаления, что приведет к new []
выделенный блок удален delete
,
1 ответ
Я думаю, что ближайший QScopedArrayPointer
, но конечно это ограничено.
Было бы мало работы для подкласса QSharedPointer
тихо добавить свой собственный скрытый Deleter
что вызывает delete[]
(и добавитьoperator[]
), таким образом, пользователю не нужно будет думать, а он все еще использует собственный код Qt - вы просто аккуратно завернули его.