C++写入时复制子字符串/子数组
C++ copy-on-write substring/subarray
我有很多文本处理(例如.xml,json,yaml),我希望所有解析的子字符串都引用输入缓冲区,而不是复制。
我有点受到Golang切片的影响,它们都具有最佳大小(ptr + len)。由于我们实际上没有C++的GC,因此写入时复制和引用计数可能会使设计更合适。
或者,我会在同一字符串/切片类下抽象出静态 c 字符串。
有没有一种解决方案可以提供所有:
- 在获取子字符串时避免复制。
- 写作时复制。 用
- 同一类包装静态 c 字符串。
- 不是特定于操作系统/编译器的(即 gcc 的 std::string 不起作用)。
如果没有,在实施时我还应该考虑什么?(我正在考虑使用原子操作来管理引用计数,并用空引用计数标记 c 字符串)。
编辑:
- std::string_view 不好,因为它不提供要求 2。
- 具体场景:我想解析 json 文档而不创建许多子字符串副本。然后我只想更改一个字符串值。
Adobe stlab 库有一个用于写入时复制功能的包装类。
但是,您可能只对使用std::string
进行写作和std::string_view
(C++17)进行阅读感兴趣,因为它们是标准的。执行复制是创建新std::string
的问题,同时复制std::string_view
只会复制它的描述(基本指针和大小)。
对于引用计数,有std::shared_ptr
和std::enable_shared_from_this
相关文章:
- 将C#字符串数组传递给C++
- 如何为 C 型字符串数组编写 getter 和 setter?
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 尝试将 c 字符串数组与分隔符连接起来
- 将字符串数组传递给接受常量字符**的函数
- 返回 C++ 中的字符串数组
- 如何从COM模块中的函数返回字符串数组?
- 无法将字符串数组声明为类成员而不是字符 (C++)
- 删除字符串数组
- 如何将字符串数组返回到 java JNI
- 将字符串数组作为函数参数传递
- C++将字符串数组的元素存储到变量中
- 循环访问还包含未使用元素的字符串数组
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 乘以字符串/数组和全局数组
- 递归二进制搜索与字符串数组
- 如何初始化一个标准::字符串数组?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- C++字符串数组的动态向量
- 给定一个等长字符串数组