LINUX.ORG.RU

клонирование объектов (C++)


0

0

Написал класс, содержащий грубо говоря несколько динамических массивов (все private). Довольно неожиданно понадобилось копировать объекты один к одному. Есть ли такая возможность, с обходом копирования каждого массива вручную (т.к. всё private, пришлось бы писать функцию для каждого массива, которая возвращает на него указатель, копирует, ...)? Уточню - нужен не новый указатель на объект, а именно новый объект.

anonymous

переделать свои динамические массивы в класс и определить копирование, либо использовать std:vector

anonymous2 ★★★★★
()

не вижу проблемы.

std::vector a = { ...many elements are here.. }; std::vector b = a; // a == b eq true.

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

asgard
()

Стандартный метод, насколько мне известно, перегрузка конструктора копий, о чем, впрочем, уже написали.

annoynimous ★★★★★
()
Ответ на: комментарий от annoynimous

> Стандартный метод, насколько мне известно, перегрузка конструктора копий, о чем, впрочем, уже написали.

И, насколько помню, как раз описывается у Страуструпа при обсуждении копирующего конструктора.

shumer
()
Ответ на: комментарий от anonymous

Приватные данные доступны методам класса (а конструктор - один из них) всегда.

annoynimous ★★★★★
()
Ответ на: комментарий от Legioner

Статические объявленные массивы да, копируются (их размер учитывается в размере объекта), а вот динамически размещаемые (на которые есть только указатель) - нет

annoynimous ★★★★★
()
Ответ на: комментарий от Legioner

блин, автор же сказал - массивы динамические, суть int *x; , а не int x[3];

Скопируются только указатели, невольный implicit sharing так сказать =)

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

и вообще, как уже сказали, использовать std::vector - самое то.

alex_custov ★★★★★
()

а как на счёт смартпоинтера?

in_dance
()

> Довольно неожиданно понадобилось

LOLище:)

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.