局部变量使用遇到的问题

   再写哈夫曼树实现的时候,用了标准库优先级队列来存储,更新结点,但是直接存储节点对象还是存储指针呢,本来我习惯于存储指针感觉指针很好用,也很灵活。但就是想试试直接存储节点,于是很自然地分配了局部对象,然后加到队列里,然后在分配了局部对象,加到队列里,运行程序,怎么搞都不对,后来去网上求助,才明白在一个循环里分配局部对象的每次都是一样的,自己以为每次都分配了不同的内存空间,实际每次操作的都是同一个片内存。

测试代码:

#include<iostream>
using namespace std;

class test{
public:
    int a;

};

int main(){


for(int i=0;i!=10;++i){
    test t;

    cout<<&t<<endl;
}

return 0;
}

运行结果:


但是如果用new:

#include<iostream>
using namespace std;

class test{
public:
    int a;

};

int main(){


for(int i=0;i!=10;++i){
    test *t=new test;

    cout<<t<<endl;
}

return 0;
}
运行结果:

每次都是变的,。

所以有时候在程序中要新建点的时候最好还是用new 来分配。说来惭愧,虽然我知道这个但是我却不知道这个属于哪一块知识,貌似CSAPP上有,最近要看的东西太多,暂时搁下了,过段时间再看。。。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值