2

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

任何帮助将不胜感激。

谢谢 !

4

1 回答 1

5

那是因为您试图通过const对它的引用来修改(特别是分配)一个值(因为这是取消引用 ashared_ptrconst您的东西)。假设Data有一个复制构造函数,你应该这样重写你的程序:

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

    A(A const& aSource)
    {
        dataPtr.reset(new Data(*(aSource.dataPtr)));
    }
};
于 2013-02-13T16:10:12.500 回答