懒惰复制-如何从浅拷贝创建深拷贝
Lazy copying - how to create a deep copy from 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;
但是它不工作。
为什么我不首先创建深度复制?因为有这么多的副本,只有很少的副本被更改,它们占用了这么多的内存。
我该怎么做?
注:我禁止在这个任务中使用STL和string
您可以将所有数据成员分离到一个类或结构中,并在副本之间共享这些数据(使用引用计数)。所有想要更改数据的方法必须检查当前对象是否为独占数据所有者,否则将对数据进行深度复制。
相关文章:
- 与浅拷贝构造函数和深拷贝构造函数混淆
- 使用复制构造函数修复浅拷贝
- C++ 一个lambda浅拷贝const Type&如果它被赋予一个命名捕获,如[copy=val](){}?
- 在构造函数中浅拷贝字符串数组
- 为什么移动语义与动态 mem 分配中的浅拷贝具有相同的行为
- 在函数中传递带有指针成员的结构是浅拷贝或深拷贝在 C 中
- C++ 如何为地图创建浅拷贝构造函数
- 浅拷贝到协议缓冲区的字节字段中
- C++ 标准::字符串意外更改。我认为这个问题是关于深和浅拷贝的
- 为什么下面的类不对数组 arr 进行浅拷贝?
- 在C++中使用浅拷贝而不是引用的原因
- C++需要一个浅拷贝,但并不完全如此
- STD向量C++ - 深拷贝或浅拷贝
- 浅拷贝后追加字符指针
- 带矢量的浅拷贝
- 康斯特指针浅拷贝
- 从一个数组到另一个数组的选择性浅拷贝
- 懒惰复制-如何从浅拷贝创建深拷贝
- 静态内存分配中的浅拷贝构造函数问题
- 是否vector::push_back()进行浅拷贝&如何解决这个问题