c++ - 在 std::string 中使用自定义分配器重新使用已分配的 char 缓冲区

标签 c++ memory-management stdstring

我需要在 std::string 对象中使用一个已经分配的 char* 缓冲区(带有字符串内容)。经过一些研究,我发现这几乎是不可能的,并且 std::string 总是会有自己的私有(private)数据拷贝。我能想到的唯一剩下的方法是使用自定义分配器,它将返回已分配的 char 缓冲区的地址。为此,std::string 应仅使用分配器来分配内存以保存其字符串数据,而不用于其他目的。是这样吗?

最佳答案

std::stringbasic_string 的类型定义,已经明确使用默认分配器。 std::string 无法使用不同的分配器。即使您使用所需的分配器创建了 basic_string 的新 typedef,它也无法传递给需要 std::string 的 API。

不幸的是,我看不到任何方法可以满足您在任何当前 C++ 标准中指定的所有需求,除非您能够以某种方式放宽您的一个或多个需求。

一个可能的创造性解决方案,如果您能够这样做,将分配您的“原始”char* 缓冲区作为std::string,利用 resize。然后您可以交换那个字符串到您的新字符串中,让它获得所有权。

关于c++ - 在 std::string 中使用自定义分配器重新使用已分配的 char 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24658341/

相关文章:

c++ - 获取结构的 UUID

c++ - 为什么我们必须发送const “type ”引用,而不只是将类型名称发送给构造函数

c++ - 自定义智能指针代码问题 - 智能指针不能在堆上结束吗?

c++ - 在 C++ 中,当字符串文字传递给接受 const std::string & 的函数时会发生什么?

c++ - 错误 : binary '<<' : no operator found which takes a right-hand operand of type 'std::string'

c++ for_each 并行处理两个容器

c++ - 减少调试 session 中的堆栈大小以捕获无休止的递归

python - Python内存管理

c++ - 具体哪些对象会分配到堆上?

c++ - 涉及 const_cast 的意外行为