延迟复制 - 如何从浅拷贝创建深拷贝

时间:2013-04-13 15:20:46

标签: c++ deep-copy shallow-copy

我有一个使用延迟复制的类 - 当调用复制构造函数时,它会创建浅复制,当调用一个方法时,它会创建一个深层复制并添加更多数据。

我陷入了部分困境,我应该从那个浅层副本中创建一个深层副本。

深层副本应如下所示:

  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;
  }

但我不知道如何实现它的方法。我试图创建一个临时对象并用* this

填充它
temp.m_count = this->m_count;...

并在最后

*this=temp;

但它不起作用。

为什么我不首先创建深层副本?因为有这么多副本,只有少数副本被更改,它们占用了大量内存。

我该怎么做?

P.S。我被禁止在此任务中使用STL和字符串。

1 个答案:

答案 0 :(得分:0)

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