2013-02-13 123 views
2

我想为C++ boost :: shared_ptr做深层拷贝。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的结构A的“新”

如果我不想放弃const的,如何处理?

任何帮助将不胜感激。

谢谢!

+0

这样,dataPtr将指向一个非const数据,因为const_cast会的?谢谢 ! – 2013-02-13 16:12:36

+2

'shared_ptr'的要点是避免深度复制。如果你想深度复制,你需要一个不同的指针类型。 (你也需要一个关于如何进行深层复制的约定,一个'Base *'实际上可以指向一个'派生',而'派生'必须被复制。 – 2013-02-13 16:32:58

回答

5

这是因为您试图通过const引用来修改(特别是分配)值(因为这是对引用shared_ptrconst的引用)。假设Data已经拷贝构造函数,你应该重写你的程序是这样的:

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

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