定義
指向曾經存在的對象,但該對象已經不再存在了,此類指針稱為垂懸指針。結果未定義,往往導致程式錯誤,而且難以檢測。
例子
#include<iostream>
#include <windows.h>
using namespace std;
int *p=NULL;
void fun()
{
int i=10;
p=&i;
}
void main()
{
fun();
cout<<"*p= "<<*p<<endl;
Sleep(1000);
cout<<“一秒鐘後,fun()中的i變數的存儲空間被釋放,p所指對象的值為:"<<endl<<"*p= "<<*p<<endl;
}
輸出為:
*p= 10
一秒鐘後,fun()中的i變數的存儲空間被釋放,p所指對象的值為:
*p= 1245056
Press any key to continue
可見,fun()運行完一秒鐘後,p成為懸垂指針。
避免方法
引入智慧型指針可以防止垂懸指針出現。一般是把指針封裝到一個稱之為智慧型指針類中,這個類中另外還封裝了一個使用計數器,對指針的複製等操作將導致該計數器的值加1,對指針的delete操作則會減1,值為0時,指針為NULL