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

C++ 延迟复制-如何从浅拷贝创建深度拷贝,c++,deep-copy,shallow-copy,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; te

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

我陷入了应该从浅拷贝创建深拷贝的困境

深度复制应如下所示:

  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;
但它不起作用

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

我该怎么做


另外,我被禁止在此任务中使用STL和字符串。

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

*this=temp;