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 - вы просто аккуратно завернули его.

Другие вопросы по тегам