【问题标题】:Lazy copying - how to create a deep copy from shallow copy懒惰复制——如何从浅拷贝创建深拷贝
【发布时间】:2013-04-06 01:00:57
【问题描述】:

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

我被困在应该从浅拷贝创建深层拷贝的地方。

深拷贝应如下所示:

  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 和字符串。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-04-12
      • 2011-02-09
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多