Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Supernatural
286 / 142 / 28
Регистрация: 22.11.2010
Сообщений: 1,467
#1

Как работает конструктор копирования? - C++

21.06.2014, 02:05. Просмотров 327. Ответов 5
Метки нет (Все метки)

C++
1
2
3
4
5
6
ECM::ECM(const ECM &E)   //ГЄГ®Г*ñòðóêòîð êîïèðîâГ*Г*ГЁГї
{
if (E.type) {type= new char [strlen(E.type)+1]; strcpy(type, E.type);}
else type=0;
type=E.type;Ghz=E.Ghz;Memory=E.Memory;Gb=E.Gb;
}
Объясните как работает это механизм (конструктор копирования) и как его правильно вызвать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2014, 02:05     Как работает конструктор копирования?
Посмотрите здесь:

C++ Конструктор копирования не работает
C++ Не работает конструктор копирования
C++ Неправильно работает конструктор копирования list, почему?
C++ Класс матрица (не работает конструктор копирования)
C++ Не работает конструктор копирования почему-то...
Как работает конструктор копирования C++
C++ Не работает конструктор копирования
ООП пример как сделать конструктор копирования на С++ C++
Не работает конструктор копирования C++
C++ Как написать конструктор копирования для дерева
C++ Как сделать конструктор копирования, и реализовать set и get?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6411 / 3050 / 300
Регистрация: 04.12.2011
Сообщений: 8,262
Записей в блоге: 3
21.06.2014, 02:52     Как работает конструктор копирования? #2
По всей видимости в конструкторе по умолчанию предусмотрена инициализация поля Char *type ;//имя неудачное)
нулём. По сему первая строка в операторе if проверяет, что передан объект не созданный по умолчанию или во в сяком случае type указывает на память. Потом выделяется память соответствующая размеру строки в указателе type оригинала и по-молодецки (не проверяя выделилась ли память) в неё копируется из него строка. В случае если type оригинала равен нулю (никуда не указывает) он устанавливается в ноль и в создаваемом объекте. Потом копируются значения полей памяти и объёма харддиска. А вот кусочек type = E.type; это как серпом по я- чейкам памяти. То есть изначально предполагалось создание глубокой копии, а потом вдруг указатель установлен на указатель в оригинале. Конструктор копии трудится при передаче экземпляра в функцию по значению и при возврате, например. Если функция принимает и возвращает этот экземпляр, то уже из неё вернуться не светит. Будет пытаться освободить память 2-жды. Да ещё и принадлежащую по совместительству другому объекту. Это если деструктор написан логично.
Вкратце: удалите type = E.type; и уже будет работоспособно.
Tulosba
:)
Эксперт С++
4391 / 3234 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
21.06.2014, 08:39     Как работает конструктор копирования? #3
Supernatural, конструктор копирования используется при создании НОВОГО объекта как копии уже существующего. Вызывается в большинстве случаев неявно, например при передаче аргументов в функцию по значению.
Supernatural
286 / 142 / 28
Регистрация: 22.11.2010
Сообщений: 1,467
21.06.2014, 11:56  [ТС]     Как работает конструктор копирования? #4
Цитата Сообщение от Tulosba Посмотреть сообщение
конструктор копирования используется при создании НОВОГО объекта как копии уже существующего.
это понятно, но спасибо за напоминание, мне интересно то как мне следует копировать pECM[i]-ый элемент при таком определении КК. У меня есть отдельная процедура, которая должна копировать элемент, где кстати и используется КК.
zss
Модератор
Эксперт С++
6248 / 5851 / 1891
Регистрация: 18.12.2011
Сообщений: 14,993
Завершенные тесты: 1
21.06.2014, 12:04     Как работает конструктор копирования? #5
C++
1
2
ECM a;// Создаем объект на основе конструктора по умолчанию
ECM b(a);// Создаем объект через копиконструктор
Supernatural
286 / 142 / 28
Регистрация: 22.11.2010
Сообщений: 1,467
21.06.2014, 12:18  [ТС]     Как работает конструктор копирования? #6
я понял свою ошибку, все оказалось проще, чем я думал
Yandex
Объявления
21.06.2014, 12:18     Как работает конструктор копирования?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru