Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 12.05.2007
Сообщений: 58

Конструктор копирования

06.07.2010, 17:23. Показов 1508. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток. Пишу конструктор копирования для своего класса. В классе использую list<someClass>. И у меня возник вопрос, как его правильно копировать. Пробовал использовать swap(...), но компилятор ругается на то, что ему подсовывается не list, а const list. Ткнув пальцем в небо попробовал std::copy(...) (в аналогии с vector'ом), но во время исполнения программа вылетает. Привожу пример кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Field
{
...
private:
       list<someClass> lst;
}
 
Field::Field(const Field &source)
{
        . . .
        //пробовал так
    //std::copy(source.lst.begin(), source.lst.end(), lst.begin());
        //и так 
    //lst.swap(source.lst);
}
C++
1
2
3
4
5
6
7
8
9
list<Field> arr;
Field *element=new Field();
 
//выполняем дейсвия с объектом
. . .
 
arr.push_back(*element);//если использую copy, то тут вылетает ошибка
element=new Field();
...
И еще один интересующий меня момент: нужно ли в конструкторе инициализации как-нибудь инициализировать list, что-нибудь в духе list.empty(), или в этом нет необходимости?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.07.2010, 17:23
Ответы с готовыми решениями:

Конструктор копирования
Здравствуйте! Прошло около недели после изучения c++ и до сих пор на вопрос по конструктору копирования ответа не найдено. Объясните зачем...

Добавить конструктор копирования
нужна помощь с конструктором копирования#include &lt;iostream&gt; using namespace std; class MobilePhone { std::string brandName; ...

Энтони Вильямс. Цпп мультитрид в действии::Листинг 3.4::Почему конструктор копирования deleted?!
Описывается класс в котором хранится std::stack и std::mutex. Реализация призвана избавиться от проблем с top-pop параллелизмом...

3
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
06.07.2010, 20:09
А "lst = source.lst" не работает?
0
0 / 0 / 0
Регистрация: 12.05.2007
Сообщений: 58
07.07.2010, 03:17  [ТС]
Как и оказалось, все гениальное просто)) а я боялся, что это может привести к некорректному копированию, или еще к каким последствиям...
Большое спасибо за помощь!

Был еще вопрос: нужно ли в конструкторе инициализации как-нибудь инициализировать list, что-нибудь в духе list.empty(), или в этом нет необходимости?
В принципе, в программе все работает корректно, но все же интересно как сделать правильно, по уму)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.07.2010, 09:52
Цитата Сообщение от ILUT Посмотреть сообщение
Как и оказалось, все гениальное просто)) а я боялся, что это может привести к некорректному копированию, или еще к каким последствиям...
Большое спасибо за помощь!
В реализации list'а имеются свои конструкторы копирования, которые всё сделают так, как надо (собственно, для того и задумался конструктор копирования).

Цитата Сообщение от ILUT Посмотреть сообщение
Был еще вопрос: нужно ли в конструкторе инициализации как-нибудь инициализировать list, что-нибудь в духе list.empty(), или в этом нет необходимости?
В принципе, в программе все работает корректно, но все же интересно как сделать правильно, по уму)
Не нужно. В тот момент, когда рождается на свет экземпляр класса, (при этом неважно, обычная переменная или поле структуры), то будет вызван конструктор. В тот момент, когда будет создаваться экземпляр класса Field, компилятор обеспечит вызов конструктора для поля Field.lst
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.07.2010, 09:52
Помогаю со студенческими работами здесь

Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования
Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных задаются длины трех сторон треугольника. Класс...

Конструктор класса, конструктор копирования запускается не тот который нужен
Есть такой конструктор: Neuron::Neuron(int iType_activation_funk) { this-&gt;iType_act = iType_activation_funk; switch...

Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;math.h&gt; #include &lt;algorithm&gt; using...

Конструктор инициализации, конструктор копирования, деструктор
Я сделал почти задание по перегрузке операторов. Осталось одно, тоесть три: конструктор инициализации, конструктор копирования, деструктор....

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать конструктор по умолчанию, копирования и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru