![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
![]()
Конструкторы и деструктор могут делать все что угодно.
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
![]() |
![]() |
![]() |
#12 |
Участник клуба Подтвердите свой е-майл
Регистрация: 19.11.2007
Сообщений: 1,022
|
![]()
Хм... и даже на голове стоять?
![]() ![]() Код:
|
![]() |
![]() |
![]() |
#13 |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
![]()
Повторю - конструкторы и деструктор сделает ровно то - что напишет программист. В том числе конструктор может уничтожить объект.
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
![]() |
![]() |
![]() |
#14 |
Участник клуба Подтвердите свой е-майл
Регистрация: 19.11.2007
Сообщений: 1,022
|
![]()
Не буду я с вами спорить, а лучше дам совет. Качайте книгу Стивена Прата, открывайте с начало страницу 446, а потом страницу 451 и внимательно читайте ихнее главное предназначание.
|
![]() |
![]() |
![]() |
#15 |
Форумчанин
Регистрация: 27.04.2009
Сообщений: 123
|
![]()
Интересно как вы зададите конструктору удаление объекта?
<= P.S. если я тебе помог нажми весы слева <=
|
![]() |
![]() |
![]() |
#16 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Предназначение может отличаться от использования. Оружие тоже типа предназначено для защиты, но и атаковать никто не запретит
![]() Создание объекта происходит примерно следующим образом: - Выделяется необходимый кусок памяти - Вызываются конструкторы родителей - Вызывается конструктор объекта - В случае срабатывания исключения в конструкторе, вызываются только деструкторы классов родителей, но не данного класса. память освобождается и делается вид, что объект и не создавался. Вполне может быть утечка памяти, если в куче что-то создать успели Уничтожение объекта: - вызов деструктора - вызов родительских деструкторов - освобождение памяти Конструктор и деструктор могут делать что захотят. Известно только время их вызова, а что в них творится - без разницы. Обычно они используются для инициализации и освобождения памяти соответственно, но никто не мешает в конструкторе удалить файл или в деструкторе создать базу данных. Сами конструкторы и деструкторы не производят никаких операций с память для данного объекта. В них можно создать/удалить какой-то другой объект, но конструктор за выделение памяти под "this" не отвечает, так что конструктор объект не создает в любом случае, равно как и деструктор его не удаляет. |
![]() |
![]() |
![]() |
#17 |
Пользователь
Регистрация: 24.06.2009
Сообщений: 17
|
![]()
При создание очередного экземпляра класса часто возникает необходимость начальной инициализации некоторых переменных. Для этой цели и служит конструктор. При создании экземпляра класса автоматически вызывается конструктор. Имя функции конструктора всегда совпадает с именем класса.
Бывают так же и такие ситуации, когда для правильной начальной инициализации необходима некоторая входная информация. Для этой цели служат конструкторы с параметрами. Параметров в конструкторе может быть сколько угодно... Конструкторы можно перегружать... в классе их может быть не один... Деструкторы - это функции, выполняющие деинициализацию элементов класса. Наприме...Представим себе, что в классе есть несколько инициализованных указателей. Если удалить экземпляр класса просто так, то возможна утечка памяти, т.е. элементы класса в куче так и будут висеть в ней до конца выполнения программы. Можно конечно, исхитрятся и каждый раз писать удаление элементов из кучи вручную, но это долго... неудобно... И не нужно... Достаточно лишь прописать строки удаления в деструкторе, который будет вызываться при удалении каждого экземпляра класса. Деструктор таже, как и конструктор носит имя класса, но перед ним идет знак "~"...В одном классе не может быть более одного деструктора. И еще... не бывает деструкторов с параметрами....
Our span of life is brief, but is long enough for us to live well and honestly...
|
![]() |
![]() |
![]() |
#18 |
Участник клуба Подтвердите свой е-майл
Регистрация: 19.11.2007
Сообщений: 1,022
|
![]()
А вы будете это делать?
Последний раз редактировалось profi; 29.06.2009 в 17:44. |
![]() |
![]() |
![]() |
#19 |
Участник клуба Подтвердите свой е-майл
Регистрация: 19.11.2007
Сообщений: 1,022
|
![]()
А вы бы такое сделали в своей программе (в конструкторе)?
Код:
Последний раз редактировалось profi; 29.06.2009 в 17:57. |
![]() |
![]() |
![]() |
#20 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Если понадобится, то буду
![]() Может конструктор копии хитрый сделаю, что понадобится удалить внутренности оригинала и заменить их чем-то новым. Или еще чего выдумаю умного ![]() Опять же не забываем, что конструкторов может быть много и логика работы у них может быть разная и вообще много всего интересного можно сотворить на С++. Конечно же, это легко может привести к созданию "граблей" для самого же себя, но это уже совсем другая история ![]() |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нужна ваша помощь.) | Linus | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 11.05.2009 10:00 |
нужна ваша помощь! | forsy | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 19.05.2008 14:38 |