C++的一道“怪题”,请高手指教:

概述如下:voidmain(){SavingssaObj1("3277",7000);SavingssaObj2("3279",5000);CheckingchObj1(... 概述如下:
void main()
{
Savings saObj1("3277",7000);
Savings saObj2("3279",5000);
Checking chObj1("8888");
Checking chObj2("398",10000);
list<Account*> we;
we.push_back (&saObj1);
we.push_back (&saObj2);
we.push_back (&chObj1);
we.push_back (&chObj1);
for( list< Account *>::iterator it = we.begin (); it != we.end(); ++it)
(*it)->display();//可以正常显示
ifstream in("account.txt");
Savings *x;
Checking *y;

while(s != "x 0")
{
getline(in, s);
{
if(s1 == "savings")
{
x = new Savings(s2,s3);//此处如果用Savings x(s2,s3)直接定义,则在循环外面输出时,不能够正常输出,为什么一定要用New 去定义对象。将他的内容放到we里不就可以不用管了吗?为什么非要用堆的对象才可以?

we.push_back (x);
}
else
{
y = new Checking(s2,s3);
we.push_back (y);
}
//在while外面
for( list< Account *>::iterator its = we.begin (); its != we.end(); ++its)
(*its)->display();

delete x;
delete y;
}

///////////
请高手不吝赐教,感激涕零
可以给追加100分。高手只要帮我把这个问题弄明白!!!!
to 蜗牛爬阿爬 - 魔法师 五级 :
如果定义Savings x(s2,s3),则不去定义Savings *x和x = new Savings(s2,s3);明白了吧?再帮忙继续看看吧。
展开
 我来答
蜗牛爬阿爬
2008-08-11 · TA获得超过464个赞
知道小有建树答主
回答量:282
采纳率:0%
帮助的人:0
展开全部
如果Savings x(s2,s3)直接定义
we.push_back(&x); 以后,
再循环的时候不再改变x的地址(也就是说,原来的数据会被覆盖。你可以自己做实验)

而new则是分配新的内存空间,不会覆盖原来数据(但这样做有可能造成内存泄漏,当然这是另一回事了)

不知你明白了吗?
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式