0

我得到了那个样本源:

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


while(1)
{
    tmp1 += tmp2;
}

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

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

4

1 回答 1

3

首先,strcat()不分配任何内存!如果您提供的缓冲区太小,strcat()您将获得缓冲区溢出,而不是重新分配。

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

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

于 2012-10-20T21:01:59.840 回答