什麼是正確的做法?我知道如果容器是基類值類型,那麼存儲的派生對象是'切片'。如果容器是派生類類型的,則不能存儲基類對象。對?存儲基本和派生對象的混合的容器?
如果要使用指針,auto_ptr不能使用,因爲它有複製語義問題。 shared_ptr是解決這個問題的唯一解決方案嗎?
任何人都可以提供解決此問題的更多詳細信息,示例代碼或在線文章?這應該是一個相當普遍的問題,但是我沒有在教科書或在線上找到關於它的很多信息。
在此先感謝。
btw,我只是搜索unique_ptr。它似乎不支持複製語義。因此,在STL中使用auto_ptr並非只是安全的,但可能由於缺乏複製語義,許多STL操作或算法不能用於unique_ptr容器?
感謝juanchopanza,你能詳細解釋一下'但是它的所有權語義大大改變了程序的行爲,保持......'嗎?你的意思是,如果程序員不太在意,使用shared_ptr有時會留下未使用的副本,因此該對象不能及時釋放;而unique_ptr總是有單個副本,並沒有這樣的問題? – user1559625
@ user1559625 [this so question](http://stackoverflow.com/questions/6876751/differences-between-unique-ptr-and-shared-ptr)可能有所幫助。基本上,unique_ptr具有指針對象的所有權,並在被刪除時將其刪除。所有權可以從一個unique_ptr「移動」到另一個,但永遠不會有多個所有者。通過shared_ptr,可以有任意數量的所有者,最後一個將會刪除指針。有時候,你想知道指針被刪除的時間,其他時間你不關心。 – juanchopanza
我覺得'IBase'必須有一個虛擬析構函數。使用'shared_ptr'由於刪除器的類型擦除而不是問題;但'unique_ptr'不是這種情況。 – rodrigo