2013-06-26 74 views
0

我在我的C++程序中有一些共享指針。在我分配內存給指針之後(使用新的),我在程序中做了一些事情,然後我需要知道其他模塊是否刪除了這些指針。因爲如果指針已被刪除,那麼我會得到訪問衝突讀取錯誤。有沒有任何功能或任何方式來檢查這一點?如何檢查內存分配是否仍然有效?

+2

不需要。使用智能指針,即'std :: shared_ptr'和'std :: weak_ptr'。 – GManNickG

+0

告訴我們更多關於你在創建它之後對你的可憐的指針和分配的內存做什麼:) – Antonio

+1

看看boost共享指針 - http://www.boost.org/doc/libs/1_53_0/libs/smart_ptr/ shared_ptr.htm#示例 – OldProgrammer

回答

3

我想,當你說「共享指針」時,你並不是指像std::shared_ptrboost:shared_ptr這樣的實際智能指針類,而只是一個從函數傳遞給函數的原始指針。

沒有可靠,安全和跨平臺的方式來確定原始指針的有效性。

但是,使用智能指針類將減輕管理動態內存的很多負擔。不是傳遞原始指針,而是傳遞智能指針。這些智能指針(至少是shared_種類)是參考計數的。只要指針至少有一個引用仍然存在,則指向的對象將不是delete d。一旦最後一個參考被刪除,對象自動爲delete d。

我上面提到的smart_ptr對受控對象有一個所謂的「強參考」。還有一個智能指針,它可以保持對受控對象的弱引用。這些弱指針不會阻止對象被刪除,並且在使用受控對象之前可以檢查其有效性。

查看the documentation瞭解更多信息。