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::ptr_vector 和 boost::any 的问题

boost::ptr_vector 与 std::vector<std::unique_ptr<T>>? [关闭]

C++ 初阶string底层框架模拟实现

C++ 初阶string底层框架模拟实现

python常用小技巧&深拷贝浅拷贝&集合