Форум программистов, компьютерный форум 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) сравнить суммы 1го и 2го числа и вывести ответ, сумма какого числа больше. С 1м условием справился, а вот как сделать 2е, не могу сообразить...подскажите #include <iostream.h> #include <windows.h> char...
Динамические списки C++
Всем привет. Подскажите пожалуста идеи. Дано стек, разработать функцию, которая формирует два новых стеки: первая содержит числа из исходного стека с нечетными номерами, а второе - с четными
C++ Найдите два слова с наилучшей рифмой и еще две задачи. http://www.cyberforum.ru/cpp-beginners/thread52765.html
Дан текст (набор слов). Найдите в нем два слова с наилучшей рифмой. Наилучшей будем считать рифму, когда у пары слов совпадает наибольшее число букв с конца. Формат входных данных Первая строчка входных данных содержит натуральное число n, 2<=n<=10000. Затем идет n различных строк, каждая из которых содержит одно слово (слова могут состоять из латинских и русских букв в кодировке KOI-8,...
C++ Отличие static от объявление переменных ДО функции main Может быть я не совсем точно выразился в заголовке. Интересует отличие объявление переменных ДО функции main и объявление через static. По моим ощущениям если объявлено через static, то переменная существует всегда(даже при выходе из блока где она использовалась). Но ведь если просто объявить переменные до функции main они также будут видны везде. Поясните в чем загвоздка. Заранее спасибо. ... подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,298
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 Посмотреть сообщение
но вылетает на функции
на какой? У меня вот не вылетает нигде. Мусор есть, а вылетать не вылетает.
 
Текущее время: 01:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru