У меня много обработки текста (например, xml, json, yaml), и я хотел бы, чтобы все проанализированные подстроки ссылались на буфер ввода, а не копировали.
На меня влияют срезы Голанга, которые имеют оптимальный размер (ptr + len). Поскольку у нас на самом деле нет GC в C ++, возможно, копирование при записи и refcounts делают более подходящий дизайн.
Опционально, я бы абстрагировал также статические c-строки в том же классе string / slice.
Есть ли одно решение, которое обеспечивает все:
Если нет, что еще я должен учитывать при реализации этого? (Я подумываю об использовании атомарных операций для управления подсчетами ссылок и пометке c-строк нулевым пересчетом).
РЕДАКТИРОВАТЬ:
В библиотеках Adobe stlab есть класс-оболочка для копирование при записи funcionality.
Тем не менее, вы могли бы быть заинтересованы просто пойти с std::string
для написания и std::string_view
(C ++ 17) для чтения, так как они стандартные. Выполнение копии — это вопрос создания нового std::string
тем временем копируя std::string_view
будет только копировать его описание (базовый указатель и размер).
Для подсчета ссылок есть std::shared_ptr
а также std::enable_shared_from_this
Других решений пока нет …