什么是正确的做法?我知道如果容器是基类值类型,那么存储的派生对象是'切片'。如果容器是派生类类型的,则不能存储基类对象。对?存储基本和派生对象的混合的容器?
如果要使用指针,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