boost::ptr_vector 如何深拷贝底层对象?
Posted
技术标签:
【中文标题】boost::ptr_vector 如何深拷贝底层对象?【英文标题】:How does boost::ptr_vector deep copy the underlying objects? 【发布时间】:2010-08-07 02:15:57 【问题描述】:ptr_vector
是可复制构造和可复制分配的。当它不知道它们的具体类型时,它如何深度复制底层对象?
【问题讨论】:
【参考方案1】:boost::ptr_vector
容器有一个可选的模板参数 CloneAllocator
,它定义了克隆策略。默认分配器是heap_clone_allocator
,它只是调用复制构造函数来克隆一个对象。
克隆分配器用于在克隆周围添加一层间接层。例如,它允许您提供一个自定义分配器,以正确处理不可复制类型的克隆。
您可以在 the Boost Pointer Containers Library documentation 中找到更多信息,其中解释了 Clonable 和 Clone Allocator 概念。
【讨论】:
啊——所以即使我的对象是可复制构造的,我也需要支持可克隆概念?文档似乎只在对象不是时才提到可克隆。 @Billy:这就是我的理解。我没有广泛使用ptr_vector
,但这就是我使用的其他指针容器处理克隆的方式。
@Billy:您也可以使用view_clone_allocator
代替heap_clone_allocator
来绕过可克隆的要求。然后不需要new_clone()
的重载。显然你不能深拷贝容器。以上是关于boost::ptr_vector 如何深拷贝底层对象?的主要内容,如果未能解决你的问题,请参考以下文章
boost::ptr_vector 和 boost::any 的问题