以前对指针释放的问题没有太在意,今天碰到了就仔细察看了一些资料,进行了简单的测试,现在给出测试结果,希望对新手有所帮助:
void dispose1( int * p)
{
//p address 0x0012ff20
//p value 0x00372aa0
//*p = 8;
delete p;
//p address 0x0012ff20
//p value 0x00372aa0
//*p value -17891602
p = NULL;
//p address 0x0012ff20
//p value 0x00000000
}
void dispose2( int *&p)
{
//p address 0x0012ff78
//p value 0x003707b8
//*p value 16
delete p;
//p address 0x0012ff78
//p value 0x003707b8
//*p value -17891602
p = NULL;
}
int main(int argc, char* argv[])
{
int * p= new int;
//p address 0x0012ff7c
//p value 0x00372aa0
//*p value 8
*p = 8;
dispose1(p);
//p address 0x0012ff7c
//p value 0x00372aa0
//*p value -17891602
printf("%d ",p);
int * pp = new int;
*pp = 16;
//pp address 0x0012ff78
//p value 0x003707b8
//*p value 16
dispose2( pp);
//pp address 0x0012ff78
//p value 0x00000000
//*p value Error
printf("%d ",pp);
return 0;
}
总的说来,指针参数传递可以理解成为:拷贝一份地址对象,指向的堆栈空间不变。拷贝地址对象的地址和拷贝前的不同。
指针引用参数传递:可以理解成没有进行拷贝(实际上类似于二重指针的使用),直接在数据上进行处理。