void *operator new(size_t size)
{
printf("allocate %d \n",size);
return malloc(size);
}
void teststring()
{
auto printstr = [](const string &str) {
printf("%s size=%d,capacity=%d\n", str.c_str(),str.size(),str.capacity());
};
string str = "";
printstr(str);
string a = "a";
for (int i = 0; i < 100;i++)
{
str += a;
printstr(str);
}
}
int main()
{
teststring();
system("pause");
}
结果:

从结果可以看出它的布局和vector及其相似。当长度超出容量时,就“翻倍”分配内存,然后再把复制过去。

文章介绍了C++中的`operatornew`函数在内存分配中的作用,以及`string`类如何处理内存扩展,特别是在字符串连接时类似vector的行为。测试代码展示了内存分配过程和字符串容量管理。
1082

被折叠的 条评论
为什么被折叠?



