這是一個關於正確使用手柄的非常基本的問題。考慮下面的代碼(這是不是一個特定的源文件):手柄如何正確管理?
typedef void* HANDLE;
HANDLE myHandle;
myHandle = SomeObject;
//...some elaborate code...//
第一個問題:是myHandle現在位於堆棧或堆?由於Handle可以是一個指針,也可以只是一個索引,所以我不太確定。
在myHandle超出範圍的地方,它被刪除(至少我認爲是這樣)。但是,如果它是一個類成員,它將保持可見,直到擁有的對象被刪除。所以第二個問題:
如果我想避免myHandle任何進一步的訪問,是很好的做法做
myHandle = 0; // I do not need this handle anymore
請問我碰到內存管理衝突,現在,或關於管理的任何其他限制碼?是否有其他的選擇來說明這把手不宜使用了類似指針:
mypointer = NULL;
編輯:我說的是排在首位的垃圾收集這顯然是不包括在C++。這是managed extensions的一部分。感謝您幫助我解決這個致命的錯誤!
「指針和索引」? 「垃圾收集器刪除」?這裏發生了什麼......也許從一開始就開始。這個問題沒有道理。 –
首先,我強烈建議您閱讀有關C++內存管理的更多內容,因爲C++中沒有垃圾收集器。如果你指的是WinAPI句柄,你應該在完成它們之後在句柄上調用CloseHandle(句柄)。但是,你應該研究C++內存管理,否則你將會遇到更嚴重的麻煩。 – Kourosh
爲什麼*沒有答案提示RAII?給我一個值得加強的答案! – jalf