2013-04-13 92 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

您可以将所有数据成员分隔到一个类或结构中,并在副本之间共享这些数据(使用引用计数)。所有想要更改数据的方法都必须检查当前对象是独占数据所有者,还是进行数据的深层复制。