我知道不应该使用自动指针容器,这可能会导致问题。真正的原因是什么?是否有任何其他类型的“智能”指针可以在容器中安全使用?
问问题
307 次
3 回答
11
容器元素应该是真正可复制的;auto_ptr 不是。如果您制作副本,则原件会被修改(失去所有权)。可以复制 boost::shared_ptr,因为这两个指针之后将共享所有权。因此,它可以在 STL 容器中使用。
于 2010-05-20T08:02:40.923 回答
3
问题在于auto_ptr
. 当您分配两个自动指针时,RHS 会将内存的所有权让给 LHS。这意味着赋值签名是:(auto_ptr& operator=( auto_ptr& rhs )
注意const
RHS 中没有),所以在很多情况下它甚至不会编译。
还有其他可以与容器一起使用的智能指针。在 TR1 中有一个shared_ptr
模型boost::shared_ptr
(在某些编译器中,它正是刚刚复制的 boost 中的代码,并且名称空间发生了变化)。Boost 也boost::unique_ptr
将auto_ptr
在即将推出的标准中替代它。它使用移动语义对单一所有权进行建模,以便可以在内部使用它而无需额外的使用成本shared_ptr
(在大多数情况下成本并不明显)。
于 2010-05-20T08:11:44.813 回答
0
据我所知,auto_ptrs 在复制时会出现问题,因此不应在 STL 容器中使用。shared_ptrs 是你的选择。
于 2010-05-20T08:02:52.730 回答