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

Зачем нужны конструктор и деструктор класса? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Замена символов в Мемо http://www.cyberforum.ru/cpp-beginners/thread52787.html
Надо написать программу которая при вводе в Мемо текста заменяла буквы на другие. А на Ц ,И на Ъ и т.д надо задать все 33 буквы рус алфавита,типа шифрование. Подскажите как осуществить.
C++ Вводится матрица... Вводится матрица А построчно. Выберите из матрицы А подматрицу В, заданной суммой элементов или сообщите, что такой подматрицы не существует. Реализовать ввод\вывод с консоли и из файла. Задачу... http://www.cyberforum.ru/cpp-beginners/thread52786.html
Сумма цифр и количество цифр C++
Задача: Вводится два натуральных числа. Нужно написать функции для того, чтобы: (1) найти сумму цифр составляющих это число (545 = 14), и количество цифр в этом числе (5464 = 4), (2) сравнить...
Динамические списки C++
Всем привет. Подскажите пожалуста идеи. Дано стек, разработать функцию, которая формирует два новых стеки: первая содержит числа из исходного стека с нечетными номерами, а второе - с четными
C++ Найдите два слова с наилучшей рифмой и еще две задачи. http://www.cyberforum.ru/cpp-beginners/thread52765.html
Дан текст (набор слов). Найдите в нем два слова с наилучшей рифмой. Наилучшей будем считать рифму, когда у пары слов совпадает наибольшее число букв с конца. Формат входных данных Первая строчка...
C++ Отличие static от объявление переменных ДО функции main Может быть я не совсем точно выразился в заголовке. Интересует отличие объявление переменных ДО функции main и объявление через static. По моим ощущениям если объявлено через static, то переменная... подробнее

Показать сообщение отдельно
kravam
быдлокодер
1697 / 884 / 45
Регистрация: 04.06.2008
Сообщений: 5,481
01.03.2013, 13:34
Цитата Сообщение от Nick Alte Посмотреть сообщение
При выходе из функции срабатывает деструктор аргумента и выделенная память (на которую ссылается как объект параметра, так и породивший его объект, живущий в функции main) уничтожается, после чего указатели объекта, сидящего в функции main начинают указывать "в никуда"
То есть я правильно понял- имеем объект ob с полями указателями, например (x,y,z) указывающими на определённую область памяти. Потом копируем этот объект, (не нарочно, а косвенно, вот так: (run (ob)), чего-то там делаем- проще говоря, делаем вычисления с разыменоваными указателями, а при возвращении из run указатели в x будут невалидны?

Да нет конечно. Замечу также, что деструктор, сработающий при выходе из run никакого влияния на память, на которую указывают указатели (я про x, y и z) не окажет- ибо его нет, этого деструктора.

А если мы его напишем:
C++
1
X:: ~X() {;delete x; delete y; delete z;};
Тогда да, по выходе из run(ob) указатели невалидны (что не значит, что вылетит исключение, у меня по ним мусор просто появляется.)

Тем не менее, конечно, правильно писать
C++
1
run (X& ob);
. Но это единственное на что будет влиять- на правильность данных, которые мы впоследствие будем выводит print. Но, повторюсь, в противном случае (а именно: run (X ob)) по выходе из run указатели в оригинальном объекте (а не в той копии, котрая была передана в run, как мы выяснили, она к этом времени исчезнет) всё равно останутся валидными.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Цитата Сообщение от easybudda Посмотреть сообщение
но вылетает на функции
на какой? У меня вот не вылетает нигде. Мусор есть, а вылетать не вылетает.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru