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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.