C ++ boost :: shared_ptr的深层拷贝

时间:2013-02-13 16:03:36

标签: c++ boost deep-copy

我正在尝试为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,如何处理?

任何帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:5)

这是因为您尝试通过const引用来修改(特别是分配)某个值(因为这是取消引用shared_ptrconst的权限)。假设Data有一个复制构造函数,你应该用这种方式重写你的程序:

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

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