c++动态数组和string对象的内存分配释放问题。str2是怎么被释放内存的

[复制链接]
查看11 | 回复4 | 2012-9-17 03:55:20 | 显示全部楼层 |阅读模式
str2可能会被编译器优化,也就是说1000000次string str2=str可能只会执行一次,但具体情况能看编译优化能力了,还有就是虽然str2处于一个循环体内,但它的生存期间可能不是在{}这个花括号之后就释放,虽然你不能在花括号之外访问str2,但它倒底有没有释放呢,你可以让一个指针指向它然后测试一下,但世界上有很多编译器,千差万别,所以不要用来得出的结果只能说这个编译器是这样的,毕竟这些机制并不ANSI标准之中,它们是由编译器厂家制定的,来个总结就是有以可能:1:str2在{}之后被干掉,2:str2在函数返回时才释放3:编译器可能会优化循环体,把不变的运算搬到循环体外4:str2虽然会调用复制构造函数1000000次,但可能...
回复

使用道具 举报

千问 | 2012-9-17 03:55:20 | 显示全部楼层
for(int ix=0;ix!=1000000;++ix){string str2=str; //do the copy,automatically allocatedif(str!=str2)
//use the new string; //do nothing}
...
回复

使用道具 举报

千问 | 2012-9-17 03:55:20 | 显示全部楼层
//C-style character string implementationconst char *pc="a very long literal string";const size_t len=strlen(pc +1); //space to allocatefor(size_t ix=0;ix!=1000000;++ix){ch...
回复

使用道具 举报

千问 | 2012-9-17 03:55:20 | 显示全部楼层
str2是string类型的变量,它的作用范围是在for循环中,当for循环结束后就自动被释放了,这和你在for循环中申请一个整形变量最后被释放是一样的道理。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行