簡體   English   中英

延遲復制-如何從淺表副本創建深表副本

[英]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;

但這不起作用。

為什么我不首先創建深層副本? 因為副本太多,所以更改的副本很少,因此占用了大量內存。

我該怎么辦?

PS我被禁止在此任務中使用STL和字符串。

您可以將所有數據成員分隔為一個類或結構,並在副本之間共享此數據(使用引用計數)。 所有想要更改數據的方法都必須檢查當前對象是否為獨占數據所有者,否則將對數據進行深層復制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM