懒惰复制-如何从浅拷贝创建深拷贝

Lazy copying - how to create a deep copy from shallow copy

本文关键字:浅拷贝 创建 深拷贝 复制      更新时间:2023-10-16

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

我被卡住了,我应该从浅拷贝中创建一个深拷贝。

深拷贝应该像这样:

  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;

但是它不工作。

为什么我不首先创建深度复制?因为有这么多的副本,只有很少的副本被更改,它们占用了这么多的内存。

我该怎么做?

注:我禁止在这个任务中使用STL和string

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