2013-04-13 95 views
0

我有一個使用懶惰拷貝的類 - 當調用拷貝構造函數時,它創建淺拷貝,當調用一個方法時,它創建一個深層拷貝並添加一些更多數據。懶惰的拷貝 - 如何從淺拷貝創建深層拷貝

我被困在一部分,我應該從那個淺拷貝創建一個深層副本。

深副本應該是這樣的:

m_count = copy.m_count; 
    k = copy.k; 
    m_record = new TRecord * [k*SIZE]; 
    char * temp; 
    for(int i=0;i<m_count;i++) { 
    m_record[i] = new TRecord; 
    temp = new char[12]; 
    strcpy(temp, copy.m_record[i]->Id); 
    m_record[i]->Id = temp; 

    temp = new char[strlen(copy.m_record[i]->Name) + 1]; 
    strcpy(temp, copy.m_record[i]->Name); 
    m_record[i]->Name = temp; 

    temp = new char[strlen(copy.m_record[i]->Surname) + 1]; 
    strcpy(temp, copy.m_record[i]->Surname); 
    m_record[i]->Surname = temp; 
    } 

,但我不知道如何實現它那個方法。我試圖創建一個臨時對象,並使用*此

temp.m_count = this->m_count;... 

,並在年底

*this=temp; 

填滿它,但它不工作。

爲什麼我不首先創建深度複製?因爲拷貝太多,只有少數拷貝被改變,並且它們佔用了太多內存。

我應該怎麼做?

P.S.我被禁止在這個任務中使用STL和字符串。

回答

0

您可以將所有數據成員分隔到一個類或結構中,並在副本之間共享這些數據(使用引用計數)。所有想要更改數據的方法都必須檢查當前對象是獨佔數據所有者,還是進行數據的深層複製。