Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2009, 15:40   #11
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от profi Посмотреть сообщение
Ну скажите, что конструктор создает объект, а деструктор его разрушает . Это одно из главных отличий.
Конструкторы и деструктор могут делать все что угодно.
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 29.06.2009, 15:45   #12
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Хм... и даже на голове стоять? Шучу .
Код:
Конструкторы и деструктор могут делать все что угодно.
Прям таки все угодно? Но поверте конструкторы не разрушают объекты в отличии от деструкторов.
profi вне форума Ответить с цитированием
Старый 29.06.2009, 15:54   #13
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Повторю - конструкторы и деструктор сделает ровно то - что напишет программист. В том числе конструктор может уничтожить объект.
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 29.06.2009, 16:15   #14
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Не буду я с вами спорить, а лучше дам совет. Качайте книгу Стивена Прата, открывайте с начало страницу 446, а потом страницу 451 и внимательно читайте ихнее главное предназначание.
profi вне форума Ответить с цитированием
Старый 29.06.2009, 16:22   #15
assasin
Форумчанин
 
Регистрация: 27.04.2009
Сообщений: 123
По умолчанию

Цитата:
Сообщение от Blade Посмотреть сообщение
Повторю - конструкторы и деструктор сделает ровно то - что напишет программист. В том числе конструктор может уничтожить объект.
Интересно как вы зададите конструктору удаление объекта?
<= P.S. если я тебе помог нажми весы слева <=
assasin вне форума Ответить с цитированием
Старый 29.06.2009, 16:32   #16
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Предназначение может отличаться от использования. Оружие тоже типа предназначено для защиты, но и атаковать никто не запретит
Создание объекта происходит примерно следующим образом:
- Выделяется необходимый кусок памяти
- Вызываются конструкторы родителей
- Вызывается конструктор объекта
- В случае срабатывания исключения в конструкторе, вызываются только деструкторы классов родителей, но не данного класса. память освобождается и делается вид, что объект и не создавался. Вполне может быть утечка памяти, если в куче что-то создать успели

Уничтожение объекта:
- вызов деструктора
- вызов родительских деструкторов
- освобождение памяти

Конструктор и деструктор могут делать что захотят. Известно только время их вызова, а что в них творится - без разницы. Обычно они используются для инициализации и освобождения памяти соответственно, но никто не мешает в конструкторе удалить файл или в деструкторе создать базу данных.
Сами конструкторы и деструкторы не производят никаких операций с память для данного объекта. В них можно создать/удалить какой-то другой объект, но конструктор за выделение памяти под "this" не отвечает, так что конструктор объект не создает в любом случае, равно как и деструктор его не удаляет.
pu4koff вне форума Ответить с цитированием
Старый 29.06.2009, 17:25   #17
Victor Deltorro
Пользователь
 
Аватар для Victor Deltorro
 
Регистрация: 24.06.2009
Сообщений: 17
По умолчанию

При создание очередного экземпляра класса часто возникает необходимость начальной инициализации некоторых переменных. Для этой цели и служит конструктор. При создании экземпляра класса автоматически вызывается конструктор. Имя функции конструктора всегда совпадает с именем класса.
Бывают так же и такие ситуации, когда для правильной начальной инициализации необходима некоторая входная информация. Для этой цели служат конструкторы с параметрами. Параметров в конструкторе может быть сколько угодно...
Конструкторы можно перегружать... в классе их может быть не один...
Деструкторы - это функции, выполняющие деинициализацию элементов класса. Наприме...Представим себе, что в классе есть несколько инициализованных указателей. Если удалить экземпляр класса просто так, то возможна утечка памяти, т.е. элементы класса в куче так и будут висеть в ней до конца выполнения программы. Можно конечно, исхитрятся и каждый раз писать удаление элементов из кучи вручную, но это долго... неудобно... И не нужно... Достаточно лишь прописать строки удаления в деструкторе, который будет вызываться при удалении каждого экземпляра класса. Деструктор таже, как и конструктор носит имя класса, но перед ним идет знак "~"...В одном классе не может быть более одного деструктора. И еще... не бывает деструкторов с параметрами....
Our span of life is brief, but is long enough for us to live well and honestly...
Victor Deltorro вне форума Ответить с цитированием
Старый 29.06.2009, 17:37   #18
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
но никто не мешает в конструкторе удалить файл или в деструкторе создать базу данных.
А вы будете это делать?

Последний раз редактировалось profi; 29.06.2009 в 17:44.
profi вне форума Ответить с цитированием
Старый 29.06.2009, 17:49   #19
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
Сообщение от Blade Посмотреть сообщение
В том числе конструктор может уничтожить объект
А вы бы такое сделали в своей программе (в конструкторе)?

Код:
MyClass()
{
MyClass *obj=new MyClass;
.....................
delete obj;
}
Я лично нет. Это не к чему. Думаю все знают Бьярна Страуструпа так вот он писал, что бы все в языке С++ использовали по его прямому предназначению. Например плюс "+" не перегружали, что бы он отнимал, а не слаживал числа и т.д. Как раз там и про конструкторы упоминание есть.

Последний раз редактировалось profi; 29.06.2009 в 17:57.
profi вне форума Ответить с цитированием
Старый 29.06.2009, 18:15   #20
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от profi Посмотреть сообщение
А вы будете это делать?
Если понадобится, то буду
Может конструктор копии хитрый сделаю, что понадобится удалить внутренности оригинала и заменить их чем-то новым. Или еще чего выдумаю умного Главное - чтобы логика работы была понятна и работало всё корректно, а уж где это сделано (в конструкторе, деструторе или методе каком) - не важно.
Опять же не забываем, что конструкторов может быть много и логика работы у них может быть разная и вообще много всего интересного можно сотворить на С++. Конечно же, это легко может привести к созданию "граблей" для самого же себя, но это уже совсем другая история
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна ваша помощь.) Linus Паскаль, Turbo Pascal, PascalABC.NET 4 11.05.2009 10:00
нужна ваша помощь! forsy Паскаль, Turbo Pascal, PascalABC.NET 2 19.05.2008 14:38