STL重新分配C ++

时间:2012-10-20 20:59:08

标签: c++ string std

我得到了样本来源:

std::string tmp1;
std::string tmp2 = "Test";


while(1)
{
    tmp1 += tmp2;
}

我们看到tmp1获取tmp2的内容,并且每个循环在字符串末尾添加“Test”。我知道这应该类似于 strcat(),但strcat是一个C函数,它有C函数 realloc()

std :: string如何实现字符串的连接? 它是否使用某种内存重新分配?如果是,我如何在C ++中重新分配?

1 个答案:

答案 0 :(得分:3)

首先,strcat()不分配任何内存!如果为strcat()提供的缓冲区太小,则会导致缓冲区溢出,而不是重新分配。

std::string类在内部管理内存。它将使用new和delete运算符的合适序列重新分配内存。它被指定的方式将分配内存,而不是在每个字符串添加上分配新的内存。

如果您需要使用可变大小的内存量,最好将std::vector<T>用于合适的类型T。该类负责分配和释放内存。你只需告诉它你需要多少元素。在引擎盖下,它还使用new和delete运算符的组合(实际上是一个分配器对象)来维护内存。没有像C realloc()这样的东西的直接支持。