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

Подвисание программы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ часть программы есть нужно завершить http://www.cyberforum.ru/cpp-beginners/thread221649.html
С клавиатуры вводятся N целых чисел (для их хранения использовать двусвязный список). Вывести элементы списка, расположенные между максимальным и мини-мальным элементами. часть программы есть нужно завершить #include <stdio.h> #include <stdlib.h> struct Item { struct Item *next; struct Item *prev; int data; };
C++ Запуск функции Здравствуйте уважаемые форумчане, очень нужна ваша помощь! Есть функция void F3(double *p, double *q) { int i,n; for (i=0; p!=0; i++) http://www.cyberforum.ru/cpp-beginners/thread221636.html
слияние на 4х лентах... C++
очень нужет код простого слияния на 4х лентах...у кого есть прошу выложить) зарание спасибо!
C++ древо и динамические списки
нужы 2 эти программы. древо, и динамические списки
C++ Реализовать шаблон Array http://www.cyberforum.ru/cpp-beginners/thread221632.html
Срочно нужна помощь! Реализовать шаблон Array, как класс-шаблон числового массива с задаваемыми пределами индексов! Буду очень благодарен за помощь!
C++ Дана целостная матрица Дана целостная матрица i,j=1,...,n. Получить b1,...,bn, где bi - это n Σ a^2ij j=1 подробнее

Показать сообщение отдельно
rangerx
1919 / 1528 / 139
Регистрация: 31.05.2009
Сообщений: 2,892
28.12.2010, 18:21     Подвисание программы
Цитата Сообщение от Maruna Посмотреть сообщение
вы хотите сказать, что когда я передаю объект в функцию, то передаю ссылку на этот объект?
Я хочу сказать, что когда вы делаете так
C++
1
L.AddHead(b);
а AddHead, напомню, имеет вид void AddHead(Books n)
то происходит следующее(см. комментарий)
L.AddHead(b); // Books n(b);
Т.е. для объекта n класса Books вызывается конструктор принимающий в качестве параметра ссылку на объект класса Books. Такого конструктора у вас нет, поэтому компилятор сам создаст подобный конструктор, который полностью скопирует всё содержимое объекта b в объект n, а это значит, что и указатели объекта n теперь будут указывать на ту же область памяти, что и указатели объекта b. Поэтому когда объект n выйдет из области видимости(а произойдёт это как только отработает метод AddHead) и будет вызван его деструктор, память на которую указывают указатели объекта n( и b) освободится. А когда в свою очередь будет вызван деcтруктор объекта b, то он попытается освободить память, которую уже освободил деструктор объекта n. Ничего хорошего из этого естественно не выйдет. Так вот, цель написания конструктора копирования как раз и состоит в том чтобы не допустить подобной ситуации(когда указатели разных объектов указывают на одну и ту же область памяти).
Цитата Сообщение от Kastaneda Посмотреть сообщение
Так, что либо напишите конструктор копирования,
Не "либо", а обязательно + оператор присваивания.
Цитата Сообщение от Kastaneda Посмотреть сообщение
либо пользуйтесь 2м вариантом (с указателем).
А разница-то в чём, указатель разыменованый передётся.
 
Текущее время: 04:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru