我有一個C++應用程序,它廣泛使用指針來維護相當複雜的數據結構。該應用程序對大型數據集(可能需要幾GB內存)進行數學模擬,並使用Microsoft的Visual Studio 2010進行編譯。開始使用C++中的智能指針
我現在正在重新編制應用程序的重要部分。爲了減少錯誤(懸掛指針,內存泄漏......),我想開始使用智能指針。只要有限,犧牲記憶或表現是可以接受的。
實際上,大多數類都在大池中維護(每個類一個池),儘管類可以相互引用,但您可以將該池視爲該類所有實例的所有者。但是,如果池決定刪除一個實例,我不希望任何仍然引用已刪除實例的其他類具有懸掛指針。
在另一部分中,我保存指向由應用程序中的其他模塊交付的實例的指針集合。在實踐中,其他模塊保持傳遞實例的所有權,但在某些情況下,模塊不希望關注所有權,只是想將實例傳遞給集合,告訴它「現在是你的,管理它」。
什麼是開始引入智能指針的最佳方式?用智能指針[隨機]替換指針似乎並不正確,並且可能不能提供智能指針的所有(或任何)優點。但是什麼是更好的方法?
我應該進一步調查哪些類型的智能指針?我有時使用std :: auto_ptr來釋放本地分配的內存,但是這似乎在C++ 0x中被刪除了。 std :: unique_ptr是一個更好的選擇嗎?或者我應該直接去共享指針或其他類型的智能指針?
Replacing existing raw pointers with smart pointers這個問題似乎很相似,但我不問它有多容易,而是問最好的方法是什麼,以及哪種智能指針最適合。
在此先感謝您的意見和建議。
+1好建議。你必須做大量的對象創建/銷燬或指針複製才能看到'shared_ptr'和'intrusive_ptr'之間的性能差異。 – Doug 2010-10-07 11:05:17