У меня есть класс, который использует ленивое копирование — когда вызывается конструктор копирования, он создает поверхностное копирование, а когда вызывается один метод, он создает глубокое копирование и добавляет еще некоторые данные.
Я застрял в части, где я должен создать глубокую копию из этой мелкой копии.
Глубокая копия должна выглядеть так:
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 и строку в этой задаче.
Вы можете разделить все элементы данных на класс или структуру и делиться этими данными между своими копиями (используя подсчет ссылок). Все методы, которые хотят изменить данные, должны проверить, что текущий объект является эксклюзивным владельцем данных, или же сделать глубокую копию данных.
Других решений пока нет …