我有很多文本处理(例如xml,json,yaml),我希望所有解析的子字符串都能引用输入缓冲区,而不是复制。
我受到了Golang切片的影响,这些切片都具有最佳尺寸(ptr + len)。由于我们在C ++中没有真正的GC,因此写入时复制和重新计算可以使设计更合适。
在视觉上,我还要在相同的字符串/切片类下抽象出静态c字符串。
是否有一个解决方案可以提供所有:
如果没有,在实施时我还应该考虑什么? (我正在考虑使用原子操作来管理refcounts,并使用null refcount标记c-string。)
编辑:
答案 0 :(得分:2)
Adobe stlab库有copy-on-write功能的包装类。
但是,您可能会对Package Manager Console
写作和std::string_view
(C ++ 17)阅读感兴趣,因为它们是标准的。执行复制是一个新的Init.ps1
,同时复制std::string
只会复制它的描述(基本指针和大小)。