2013-02-13 125 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))); 
    } 
};