Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти 10 первых натуральных чисел, оканчивающихся на цифру 7 кратных числу 9, не меньших 100 (Pascal -> C++) http://www.cyberforum.ru/cpp-beginners/thread1213553.html
Найти 10 первых натуральных чисел, оканчивающихся на цифру 7 кратных числу 9 и находящихся в интервале левая граница которого равна 100 var i, v : integer; begin v:=99; for i := 1 to 10 do...
C++ Повторный ввод данных после ошибки как после слов "ошибка!!!..." вернуться для повторного ввода оценки ученику?#include <iostream> #include <fstream> #include <string> using namespace std; int k, i, r; char u; string line;... http://www.cyberforum.ru/cpp-beginners/thread1213538.html
Количество трёхзначных чисел, все цифры которых разные C++
Есть задача Составить прорамму , которая считает количество натуральных чисел ,в которых все 3 цифры разные. Вот , что я написал int col = 0; for (int i = 100 ; i < 1000; i++) if (((i/100) !=...
Поток с бесконечным циклом C++
Добрый вечер всем. Пишу простенькую игру, появилась необходмость в дополнительном потоке. Как не крутил поставленную задачу над игрой, прихожу к одному - бесконечный цикл в точке входа(функции) в...
C++ По заданному году получить по порядку все числа, на которые в каждом месяце попадает последняя пятница http://www.cyberforum.ru/cpp-beginners/thread1213468.html
Задали задание, нужна помощь. Заранее благодарю. Написать программу в C++. Задание: В библиотеке каждая последняя пятница каждого месяца- санитарный день. Составить прогу , которая позволяла бы...
C++ Записать целое число буквами (можно ли упростить код?) Здравствуйте помогите упростить код. Условие: Напишите программу которая вводит целое число, не превышающее 100, и выводит его прописью, например, 21→"двадцать один". Мой код #include... подробнее

Показать сообщение отдельно
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,673
Записей в блоге: 5
21.06.2014, 02:52
По всей видимости в конструкторе по умолчанию предусмотрена инициализация поля Char *type ;//имя неудачное)
нулём. По сему первая строка в операторе if проверяет, что передан объект не созданный по умолчанию или во в сяком случае type указывает на память. Потом выделяется память соответствующая размеру строки в указателе type оригинала и по-молодецки (не проверяя выделилась ли память) в неё копируется из него строка. В случае если type оригинала равен нулю (никуда не указывает) он устанавливается в ноль и в создаваемом объекте. Потом копируются значения полей памяти и объёма харддиска. А вот кусочек type = E.type; это как серпом по я- чейкам памяти. То есть изначально предполагалось создание глубокой копии, а потом вдруг указатель установлен на указатель в оригинале. Конструктор копии трудится при передаче экземпляра в функцию по значению и при возврате, например. Если функция принимает и возвращает этот экземпляр, то уже из неё вернуться не светит. Будет пытаться освободить память 2-жды. Да ещё и принадлежащую по совместительству другому объекту. Это если деструктор написан логично.
Вкратце: удалите type = E.type; и уже будет работоспособно.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru