hur.cn - 华软网

 热门搜索

CStringArray Add方法是如何添加对象的?

  作者:未知    来源:网络    更新时间:2010/12/6
CStringArray csa;
CString temp;
temp.Append("123");
csa.Add(temp);
temp.Empty();
temp.Append("456");
cout<<csa.GetAt(0);
运行结果将是123这是怎么回事啊?Add方法保存的是CSring指针,我改变CString对象并没有影响到CStringarray里保存的并没有随之改变,这是为什么呢?要是Add方法是通过对象复制向CStringArray里增加对象,那么如何释放增加进去的CString呢?MSDN里说 RemoveAt方法只是移除对象指针,其实不负责释放对象?哪位大神知道?
这个问题困惑小弟很久了。
---华软 网友回答---
没有人知道吗?
---华软网友回复---
CString::Empty 
void Empty( );

Remarks

Makes this CString object an empty string and frees memory as appropriate.


---华软网友回复---
没有问题啊,CStringArray插入的是CString对象,在csa.Add(temp);的时候会调用CString的拷贝构造函数产生一个temp的拷贝放入CStringArray的内存中,所以你修改temp不会影响到已经存到CStringArray的temp拷贝的值
在RemoveAt调用的时候,会销毁temp的拷贝所占的内存,这个进程会调用CString的析构函数,销毁这个对象,所以不会引起内存泄露
---华软网友回复---
CStringArray csa;
CString temp;
temp.Append("123");
csa.Add(temp);
temp.Empty();
temp.Append("456");
cout<<csa.GetAt(0);
----------------------
自身就只增加了 "123",后来的temp和CSa没有所有关系。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。