0 / 0 / 0
Регистрация: 26.12.2014
Сообщений: 38
|
||||||||||||||||
1 | ||||||||||||||||
OOP Конструктор копирования29.05.2015, 00:47. Показов 1683. Ответов 7
Метки нет Все метки)
(
Есть программа
Вопрос: При закомментировании конструктора копирования в ход идет дефолтный конструктор копирования но при этом он работает неправильно, почему? когда мы вызываем в мейне конструктор, потом присваиваем нулевому значению массива другое значение, оно все равно вылезает, а по сути не должно, ибо мы уже скопировали все значения а в с mainvectir.cpp
0
|
|
29.05.2015, 00:47 | |
Ответы с готовыми решениями:
7
Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования Конструктор класса, конструктор копирования запускается не тот который нужен Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику Конструктор инициализации, конструктор копирования, деструктор |
15 / 15 / 3
Регистрация: 04.02.2013
Сообщений: 124
|
|
29.05.2015, 01:06 | 2 |
![]() Решение
В код Ваш сильно не вникал, но попробую объяснить. Обратите внимание, в Вашем конструкторе используется операция new. Т.е. некоторые поля объекта являются указателями, а в конструкторе Вы выделяете для них память из кучи, на которую эти указатели указывают. Дефолтный конструктор копирования просто копирует указатели, но не память, на которую они указывают! Выходит, что после такого копирования Вы имеете 2 объекта, которые указывают на одну область памяти. Таким образом, изменили данные одного объекта, второй объект изменится автоматически. Такое копирование еще называют поверхностным копированием. Специально написанный конструктор копирования решает эту проблему. В нем для нового объекта должен выделяться новый кусок памяти, чтобы после копирования объекты указывали на разные области памяти. Такое копирование называют глубоким копированием.
Вообще есть такое правило: если в конструкторе есть операция new -- пиши конструктор копирования.
1
|
0 / 0 / 0
Регистрация: 26.12.2014
Сообщений: 38
|
|
29.05.2015, 20:16 [ТС] | 3 |
Благодарю!
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
29.05.2015, 21:11 | 4 |
Такого правила нет, но есть "Правило трёх".
1
|
15 / 15 / 3
Регистрация: 04.02.2013
Сообщений: 124
|
|
30.05.2015, 14:29 | 5 |
1
|
15 / 15 / 3
Регистрация: 04.02.2013
Сообщений: 124
|
|
30.05.2015, 14:41 | 7 |
1
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
30.05.2015, 14:57 | 8 |
goditsa8, в некоторых случаях оверхеда от использования умных указателей ноль. Одни плюсы!
1
|
30.05.2015, 14:57 | |
Помогаю со студенческими работами здесь
8
Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор Конструктор копирования
Конструктор копирования Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |