C++中对于string类型的变量进行连续两次赋值,如 string str="today";str="tomorrow"; 前后两次赋值str的

前后两次赋值str的首地址有没有变化?
对于字面值常量"today"分配的内存什么时候收回?

前后两次赋值str的首地址极有可能是变化的。
因为string里面的内存是动态分配的,想要赋值新的值,必须把上一次分配的空间收回,然后再分配更大的空间,所以首地址很有肯能是变化的。
至于字面值常量“today”是存放在常量区域的,只有程序运行结束之后才会收回的。
如果楼主学过C的话,应该很好理解。如果没学过的话,建议楼主看下C中关于内存这块的内容。C++中关于内存的处理其实跟C中差不多。
不懂可以追问。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-02
#include<string>
#include<iostream>
using namespace std;
int main()
{
string str="00";
printf("%d\n",&str);
str="abcdeaa34523467hgdfsde";
printf("%d\n",&str);
str="ooo";
printf("%d\n",&str);
return 0;
}
我试了一下貌似不变
在我电脑上都是1244972
第2个回答  2013-05-02
str是一个对象,不是字符数组,对象分配完了,首地址也不会变化。
常量"today"只是一个临时变量,用完就不用了
第3个回答  2013-05-02

前后两次str的首地址没有变化

“today”是字符串常量吧 是在代码区的 

第4个回答  2013-05-02
String & String::operate =(const String &other) // 输入参数为const型
{
if(this == &other) //检查自赋值
return *this;
delete [] m_data; //释放原有的内存资源
int length = strlen( other.m_data );
m_data = new char[length+1]; //对m_data加NULL 判断
strcpy( m_data, other.m_data );
return *this; //返回本对象的引用
}

原型实现.. 经常做面试题来考.
一看便知.
相似回答