|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.03.2011, 16:20 | #1 |
Пользователь
Регистрация: 20.12.2010
Сообщений: 14
|
Объекты классов, деструкторы, конструкторы
Не совсем понимаю... поправьте, если, что...
Думается мне, что: объект к-н-дь класса можно создать статически (определить до момента компиляции), а если так?: main() { classA ObjectA; } то объект будет локальным? Или как он создастся? А через операторы new создают? Не понимаю ещё работу деструктора. Что считается уничтожением объекта? Из моих примеров как уничтожается объект определяемый как classA ObjectA? Создавая через new можно удалять через delete (это понятно). А деструктор - это уничтожение объектов и прочего созданный объектом класса? Деструктором удаляется не сам ВЕДЬ объект класса??? Надеюсь понятно спросил? Ответьте мне пожалуйста подробнее. |
11.03.2011, 16:37 | #2 | ||||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Цитата:
Цитата:
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||||
11.03.2011, 16:45 | #3 |
Software Developer
Участник клуба
Регистрация: 01.03.2011
Сообщений: 1,098
|
Для глобальных объектов конструктор объекта вызывается тогда, когда начинается выполнение программы. Для локальных объектов конструктор вызывается всякий раз при выполнении инструкции объявления переменной.
Функцией, обратной конструктору, является деструктор. Эта функция вызывается при удалении объекта. Обычно при работе с объектом в момент его удаления должны выполняться некоторые действия. Например, при создании объекта для него выделяется память, которую необходимо освободить при его удалении. Деструктор класса вызывается при удалении объекта. Локальные объекты удаляются тогда, когда они выходят из области видимости. Глобальные объекты удаляются при завершении программы. Адреса конструктора и деструктора получить невозможно. (с) Герберт Шилдт
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв. Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062 |
11.03.2011, 16:49 | #4 | |
Пользователь
Регистрация: 20.12.2010
Сообщений: 14
|
Спасибо за ответ.
Цитата:
Тогда всё вышесказанное понял кроме ДЕСТРУКТОРА. Если в одном случае объект перестаёт существовать при завершении процедуры, в другом по оператору delete. Таким образом если не определён деструктор, то произойдёт удечка памяти? А при создании через new зачем нужен delete если сделать деструктор внешним вызываемым (или как там называется). Пока не совсем понял. |
|
11.03.2011, 16:57 | #5 |
Software Developer
Участник клуба
Регистрация: 01.03.2011
Сообщений: 1,098
|
При использовании оператора delete для указателя на объект вызывается деструктор соответствующего класса.
Так понятнее?
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв. Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062 |
11.03.2011, 17:01 | #6 | |
Пользователь
Регистрация: 20.12.2010
Сообщений: 14
|
Цитата:
Кажися разобрался. Теперь нужно разобраться как написать деструктор: определить размер класса и идентификатор объекта (что-то вроде этого)??? |
|
11.03.2011, 17:04 | #7 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
main() нельзя, пишитн int main().
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su |
11.03.2011, 17:07 | #8 |
Пользователь
Регистрация: 20.12.2010
Сообщений: 14
|
|
11.03.2011, 17:10 | #9 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
деструктор вызывается до выполнения оператора класса delete.
он должен подготовить обьект к уничтожению. а освобождает память operator delete. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
11.03.2011, 17:12 | #10 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
Отвечаю на твой вопрос. Твой объект удаляется, когда выходит за scope (то есть доходит до "}") в случае обычного создания или когда ты делаешь delete в случае динамического создания. Деструктор нужно писать если тебе нужно помимо удаления объекта сделать ещё что-то (например, освободить динамически выделенную память под его поля).
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
КЛАССЫ. КОНСТРУКТОРЫ. ДЕСТРУКТОРЫ. | LeNus'Ka | Помощь студентам | 4 | 24.11.2010 17:11 |
Конструкторы и деструкторы | @arkadii | Общие вопросы C/C++ | 2 | 10.11.2010 17:40 |
С++ и С# Конструкторы и Деструкторы | exKenny | Помощь студентам | 1 | 27.04.2010 12:32 |
Классы. Конструкторы и деструкторы. | Freddy_Krueger | Помощь студентам | 1 | 29.11.2009 13:12 |