我與std::shared_ptr
和我的軟件開發過程中的工作我遇到了那個讓我懷疑內存管理案例一對夫婦 。我有一個第三方庫, 給了我總是從功能的指針,並在我的代碼我正在將它們 std::shared_ptr
(從標準而不是從升壓。順便說一下 兩者之間有什麼區別?)。所以我們可以說我有以下代碼:C++原始指針和std :: shared_ptr的
ClassA* raw = new ClassA;
std::shared_ptr<ClassA> shared(raw);
當共享指針超出範圍,現在會發生什麼(假設它是在一個函數 局部聲明,現在我退出功能)。 ClassA
對象是否仍然存在,因爲原始指針 指向它?
只是爲了說明原因:shared_ptr不考慮原始指針,因爲shared_ptr無法知道它。如果你考慮如何自己實現shared_ptr,那麼你會看到你無法檢測到是否有任何指向數據的原始指針。 – Wutz
+1。另外,這就是爲什麼你應該在創建'shared_ptr'的同一行上'new'對象。更好的是,使用['make_shared'](http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared) –
謝謝,實際上我同意沒有辦法找出原始指針是否指向對象。在這種情況下,對於原始指針是很危險的,因爲它會指向一個被銷燬的對象,因爲當超出範圍時shared_ptr會將其銷燬 – ISTB