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

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

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

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

21.06.2014, 02:05. Просмотров 333. Ответов 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++
дан класс я не могу понять как работает конструктор копирования arr.h#pragma once #include <iostream> #include <fstream> #include...

Не работает конструктор копирования - C++
Всем доброго времени суток. Помогите пожалуйста, уже битиый день не могу побороть почему не работает конструктор копирования :cry: ...

Конструктор копирования не работает - C++
Прошу вас помочь разобраться с конструктором копирования. Проблема в следующем при вызове конструктора копирование вылетает ошибка не...

Не работает конструктор копирования - C++
Пишу свой класс матрица. В конструкторе копирования вылезла ошибка, решить которую мне не удается. Отладчиком проходился не один раз,...

Не работает конструктор копирования - C++
#include <iostream.h> #include <conio.h> #include <stdio.h> class my {int x1,x2,y1,y2,col; public: my(int _x1=20, int _y1=5,...

Не работает конструктор копирования почему-то... - C++
#include "stdlib.h" #include "stdio.h" #include <iostream> #include <cstddef> using namespace std; class Top { public: ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6443 / 3082 / 306
Регистрация: 04.12.2011
Сообщений: 8,488
Записей в блоге: 4
21.06.2014, 02:52     Как работает конструктор копирования? #2
По всей видимости в конструкторе по умолчанию предусмотрена инициализация поля Char *type ;//имя неудачное)
нулём. По сему первая строка в операторе if проверяет, что передан объект не созданный по умолчанию или во в сяком случае type указывает на память. Потом выделяется память соответствующая размеру строки в указателе type оригинала и по-молодецки (не проверяя выделилась ли память) в неё копируется из него строка. В случае если type оригинала равен нулю (никуда не указывает) он устанавливается в ноль и в создаваемом объекте. Потом копируются значения полей памяти и объёма харддиска. А вот кусочек type = E.type; это как серпом по я- чейкам памяти. То есть изначально предполагалось создание глубокой копии, а потом вдруг указатель установлен на указатель в оригинале. Конструктор копии трудится при передаче экземпляра в функцию по значению и при возврате, например. Если функция принимает и возвращает этот экземпляр, то уже из неё вернуться не светит. Будет пытаться освободить память 2-жды. Да ещё и принадлежащую по совместительству другому объекту. Это если деструктор написан логично.
Вкратце: удалите type = E.type; и уже будет работоспособно.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.06.2014, 08:39     Как работает конструктор копирования? #3
Supernatural, конструктор копирования используется при создании НОВОГО объекта как копии уже существующего. Вызывается в большинстве случаев неявно, например при передаче аргументов в функцию по значению.
Supernatural
287 / 143 / 28
Регистрация: 22.11.2010
Сообщений: 1,499
21.06.2014, 11:56  [ТС]     Как работает конструктор копирования? #4
Цитата Сообщение от Tulosba Посмотреть сообщение
конструктор копирования используется при создании НОВОГО объекта как копии уже существующего.
это понятно, но спасибо за напоминание, мне интересно то как мне следует копировать pECM[i]-ый элемент при таком определении КК. У меня есть отдельная процедура, которая должна копировать элемент, где кстати и используется КК.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,183
Завершенные тесты: 1
21.06.2014, 12:04     Как работает конструктор копирования? #5
C++
1
2
ECM a;// Создаем объект на основе конструктора по умолчанию
ECM b(a);// Создаем объект через копиконструктор
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2014, 12:18     Как работает конструктор копирования?
Еще ссылки по теме:

Класс матрица (не работает конструктор копирования) - C++
так вот,что-то глючит конструктор копирования, хотя ошибок компиляции не дает(( #include <fstream> #include <iostream> #include...

Неправильно работает конструктор копирования list, почему? - C++
#include <windows.h> #include <stdio.h> #include <list> #include <iterator> #include <iostream> using namespace std; list...

ООП пример как сделать конструктор копирования на С++ - C++
Покажите пожалуйста пример конструктора копирования на С++

Как написать конструктор копирования для дерева - C++
#include <iostream> #include <fstream> using namespace std; struct item { int i; item* father; item* lson; item*...


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

Или воспользуйтесь поиском по форуму:
Supernatural
287 / 143 / 28
Регистрация: 22.11.2010
Сообщений: 1,499
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