Ленивое копирование — как создать глубокую копию из мелкой копии

У меня есть класс, который использует ленивое копирование — когда вызывается конструктор копирования, он создает поверхностное копирование, а когда вызывается один метод, он создает глубокое копирование и добавляет еще некоторые данные.

Я застрял в части, где я должен создать глубокую копию из этой мелкой копии.

Глубокая копия должна выглядеть так:

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

но я не знаю, как это реализовать этим методом. Я попытался создать временный объект и заполнить его * этим

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

и в конце

*this=temp;

но это не работает

Почему я не создаю глубокую копию в первую очередь? Потому что существует так много копий, и только немногие из них изменены, и они занимают так много памяти.

Как я должен это делать?

Постскриптум Мне запрещено использовать STL и строку в этой задаче.

0

Решение

Вы можете разделить все элементы данных на класс или структуру и делиться этими данными между своими копиями (используя подсчет ссылок). Все методы, которые хотят изменить данные, должны проверить, что текущий объект является эксклюзивным владельцем данных, или же сделать глубокую копию данных.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector