我得到了样本来源:
std::string tmp1;
std::string tmp2 = "Test";
while(1)
{
tmp1 += tmp2;
}
我们看到tmp1获取tmp2的内容,并且每个循环在字符串末尾添加“Test”。我知道这应该类似于 strcat(),但strcat是一个C函数,它有C函数 realloc()
std :: string如何实现字符串的连接? 它是否使用某种内存重新分配?如果是,我如何在C ++中重新分配?
答案 0 :(得分:3)
首先,strcat()
不分配任何内存!如果为strcat()
提供的缓冲区太小,则会导致缓冲区溢出,而不是重新分配。
std::string
类在内部管理内存。它将使用new和delete运算符的合适序列重新分配内存。它被指定的方式将分配内存,而不是在每个字符串添加上分配新的内存。
如果您需要使用可变大小的内存量,最好将std::vector<T>
用于合适的类型T
。该类负责分配和释放内存。你只需告诉它你需要多少元素。在引擎盖下,它还使用new和delete运算符的组合(实际上是一个分配器对象)来维护内存。没有像C realloc()
这样的东西的直接支持。