2012-07-04 53 views
0

我打開一個目錄與opendir(它返回目錄*),並希望保持和重複使用目錄不斷在我的對象。我原來打開目錄在我的構造函數中,並將指針存儲爲一個私有變量,這顯然失敗了,因爲一旦構造函數結束指針超出範圍和內存釋放。防止函數返回指針超出範圍?

我的問題是,我如何保持目錄引用,以便我的課程可以反覆使用它而不必每次重新打開它?我試着將它複製到DIR類型,但我得到一個抱怨,DIR沒有完全定義。我懷疑即使我能夠找出DIR定義的位置,它也會有一個拷貝構造函數。必須有另一種方法來保持它的範圍?

+0

要確定我明白:(i)你有一個類型T.(ii)你有幾個這樣的對象t1,t2和t3。 (iii)所有幾個對象t1,t2和t3將共享相同的目錄*。 (iv)問題在於,一旦t1達到其壽命終點,dir就會丟失;而t2和t3仍然想使用dir。我理解正確嗎? – thb

+0

「打開目錄」 - 這太籠統了。提供更多關於您正在使用的內容的背景。 –

+0

其實這很簡單。我有一個單一的對象。我想在單個對象中打開一個目錄。在整個這些對象的使用壽命中,它會不斷地查詢信息和文件的目錄;因爲這是我的關鍵路徑,所以我想避免每次需要輪詢時重新打開目錄的成本。我想在我的構造函數中打開一次目錄,並讓目錄在該單個對象的生命週期中保持打開狀態。不幸的是,一旦我到達構造函數的末尾,指針就超出了範圍,不能再使用 – dsollen

回答

0

對象在C++中超出範圍的唯一方法是它是一個局部變量。我會猜你做了這樣的事情:

Object *objMemberPointer; 

Constructor() 
{ 
    Object obj; 
    objMemberPointer = &obj; 
} <- obj goes out of scope here and deallocates your object. 
+0

我有一個後續問題。 我該如何去重新分配已經作爲參數傳遞給函數的數組?我需要減小數組的大小並更改數組中的值,所以我試圖創建一個新數組,釋放之前的數組和memcpy新的數組,但它會給出錯誤。如果我沒有釋放前面的數組,它可以正常工作,但前面的數組中仍有一些額外的值存在於最後。 – Ali

+0

@Ali這完全是個新問題。你應該爲它創建一個新的帖子(假設別人還沒有問過它)。 – mydogisbox