C++boost::shared_ptr的深度复制

deep copy for C++ boost::shared_ptr

本文关键字:深度 复制 shared C++boost ptr      更新时间:2023-10-16

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

任何帮助都将不胜感激。

谢谢!

这是因为您正试图通过对const的引用来修改(特别是赋值)一个值(因为这就是将shared_ptr取消引用为const所带来的效果)。假设Data有一个复制构造函数,您应该这样重写程序:

struct A
{
    boost::shared_ptr<const Data> dataPtr;
    A(A const& aSource)
    {
        dataPtr.reset(new Data(*(aSource.dataPtr)));
    }
};