【问题标题】:How does boost::ptr_vector deep copy the underlying objects?boost::ptr_vector 如何深拷贝底层对象?
【发布时间】:2010-08-07 02:15:57
【问题描述】:

ptr_vector 是可复制构造和可复制分配的。当它不知道它们的具体类型时,它如何深度复制底层对象?

【问题讨论】:

    标签: c++


    【解决方案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() 的重载。显然你不能深拷贝容器。
    猜你喜欢
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多