我需要在std :: string对象中使用已经分配的char *缓冲区(带有字符串内容)。经过一些研究后,我发现这几乎是不可能的,std :: string总是拥有自己的私有数据副本。我能想到的唯一剩下的方法就是使用一个自定义分配器来返回已经分配的char缓冲区的地址。为了实现这一点,std :: string应该只使用allocator来分配内存来保存其字符串数据,而不是其他任何内容。是这样的吗?
答案 0 :(得分:8)
std::string
是basic_string
的typedef,已经显式使用默认分配器。 std::string
无法使用不同的分配器。即使您使用所需的分配器创建了basic_string
的新typedef,也无法将其传递给期望std::string
的API。
不幸的是,除非您能够以某种方式放松一个或多个要求,否则无法满足您在任何当前C ++标准中指定的所有需求。< / p>
如果您能够这样做,一个可能的创造性解决方案就是分配您的&#34; orignal&#34;使用char*
将std::string
缓冲区设置为resize
。然后,您可以swap
将该字符串添加到您的新字符串中,以使其获得所有权。