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

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

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

最后

*this=temp;

但它不起作用。

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

我该怎么做?

PS 我被禁止在这个任务中使用 STL 和字符串。

4

1 回答 1

0

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

于 2013-04-13T17:34:35.547 回答