【问题标题】:deep copy for C++ boost::shared_ptrC++ boost::shared_ptr 的深拷贝
【发布时间】:2013-02-13 16:03:35
【问题描述】:

我正在尝试为 C++ boost::shared_ptr 做深拷贝。

struct A{
   boost::shared_ptr<const Data> dataPtr;

   A(const A& aSource) {
      dataPtr.reset(new const Data);
      *dataPtr  = *(aSource.dataPtr);
};

但是,我得到了错误: 错误:“const struct A”的“new”中未初始化 const。

如果我不想删除 const,如何处理?

任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 这样,dataPtr 会因为 const_cast 而指向一个非 const Data 吗?谢谢!
  • shared_ptr 的全部意义在于避免深拷贝。如果你想要深拷贝,你需要一个不同的指针类型。 (你还需要一个关于如何进行深度复制的约定。Base* 实际上可能指向Derived,而必须复制的是Derived。)

标签: c++ boost deep-copy


【解决方案1】:

那是因为你试图通过 const 引用来修改(特别是分配)一个值(因为这是将 shared_ptr 取消引用到 const 给你的)。假设Data 有一个拷贝构造函数,你应该这样重写你的程序:

struct A
{
    boost::shared_ptr<const Data> dataPtr;

    A(A const& aSource)
    {
        dataPtr.reset(new Data(*(aSource.dataPtr)));
    }
};

【讨论】:

    猜你喜欢
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2015-07-21
    • 1970-01-01
    • 2012-07-06
    相关资源
    最近更新 更多