複製鏈接
請複製以下鏈接發送給好友

懸垂指針

鎖定
指向曾經存在的對象,但該對象已經不再存在了,此類指針稱為懸垂指針。結果未定義,往往導致程序錯誤,而且難以檢測。
中文名
懸垂指針
外文名
Dangling pointer
避免方法
引入智能指針
定    義
指向曾經存在的對象
導致問題
程序錯誤,而且難以檢測。

目錄

懸垂指針例子

#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;
    system("pause");
}

//輸出為:
//*p = 10
//一秒鐘後,fun()中的i變量的存儲空間被釋放, p所指對象的值為:
//*p = 1245056
//Press any key to continue
調試“懸垂指針” 調試“懸垂指針”
可見,fun()運行完一秒鐘後,p成為懸垂指針。

懸垂指針避免方法

引入智能指針可以防止垂懸指針出現。一般是把指針封裝到一個稱之為智能指針類中,這個類中另外還封裝了一個使用計數器,對指針的複製等操作將導致該計數器的值加1,對指針的delete操作則會減1,值為0時,指針為NULL