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