关于C++的delete操作

来源:百度知道 编辑:UC知道 时间:2024/06/07 02:41:08
最近看到了c++这样一个函数
void fn(RMB&a, RMB&b){
RMB* pc = a + b;
RMB c = *pc;
delete pc;
}
我就很奇怪,从函数来看 a和b是栈内存对象,pc既然没有指向对内存对象,delete pc又是什么意思,明明没有堆内存可以释放啊?
我都搞糊涂了,自己实验了一下,发现delete一个指针的时候,只是把指针和堆内存的绑定给取消了,但是对内存没有指针指向的话不是会内存泄露吗?如何解释这种现象......希望哪位大牛给解释一下,谢谢

C++中的delete和new操作符2008-01-11 17:08首先,我们先来看一下小程序:

#include <iostream>
using namespace std;

void main()
{
int *a = new int;

*a = 5;
cout << a << endl;
cout << *a << endl;
delete a ;
cout << a << endl;
cout << *a << endl;
}

我这里的运行结果为

0x273ba0
5
0x273ba0
0
请按任意键继续. . .

可以看出,他的地址没有被改变,而这个内存地址当中的具体的数据却变成0了,这就被释放了。我又知道了这里a指针变量所指向的地址并没有被改变,他指向的是被释放过后的地址,这个内存地址已经不能再被使用了。如果我把程序改成这样:

#include <iostream>
using namespace std;

void main()
{
int *a = new int;

*a = 5;
cout << a << endl;
cout << *a << endl;
delete a ;
cout << a << endl;
cout << *a << endl;

*a ++;
cout << *a << endl;
}

*a指向的内存地址中的数据还是像刚刚那样,还是0。所以如果再对被释放过后的内存地址中的数据操作,他还是不会发生一点变化。从这个小