![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
Возник вопрос.
MyClass classmy; classmy = MyClass(2,3,4); Эта запись означает, что в обьект classmy созданного от родителя MyClass, будет скопирована инфа другого обьекта созданного конструктором MyClass(int, int, int). Ближе к сути... можно ли утверждать, что данный темпо-обьект будет находиться в памяти до закрытия приложения ? Или же явно вызываемый конструктор уничтожает этот обьект после присвоения его значений исходному обьекту classmy ? Это сообщение отредактировал(а) En_t_end - 6.3.2005, 15:33 |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Сначала конструктор MyClass создаст временный объект, потом будет вызван оператор присваивания (перегруженный или сгенерированный по-умолчанию) и содержимое временного объекта будет скопировано в объект classmy, потом для временного объекта будет вызван деструктор и объект будет разрушен. Сам конструктор ничего не разрушает.
-------------------- Не смей читать мою подпись!!! |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
srd
Спасибо! Для меня было важным, что временный обьект все-таки уничтожается.
Это я ступил |
|||
|
||||
| Да гость я.... |
|
|||
|
Unregistered |
Видите ли, оба утверждения содержат неточности. Чтобы ответить на вопрос о времени жизни объекта следует привлечь такие понятия как: 1) область видимости (scope) 2) класс памяти объекта Общее правило таково: объект создается, когда встречается его объявление и уничтожается, когда его имя выходит из области видимости. Поэтому автоматические объекты "живы" только до момента выхода из блока, где были объявлены. А вот глобальные объекты (т.е. объявленные за пределами ф-ций), а также объекты объявленные как static в теле ф-ции(блоке) находятся в памяти процесса (не динамической!) вплоть до его закрытия. Теперь по вашему вопросу. Автоматический объект без имени созданный и инициализированный как MyClass(2,3,4) будет жив вплоть до выхода из блока, где вы его объявили. Если этот блок ф-ция main(), то вплоть до выхода из ф-ции, т.е. до закрытия приложения. В противном случае - его время жизни будет меньше, чем продожительность процесса. Автоматический объект конечно будет уничтожен при выходе из блока, но согласно вашему примеру, этот "временный" объект проживет почти ровно столько, сколько и объект с именем classmy, к-рый является его копией. "почти ровно столько" означает, что "временный" объект был создан в стеке сразу после classmy, поэтому когда "временный" объект будет разрушен на выходе из блока, то classmy помрёт сразу вслед за ним. Принцип LIFO, знаете ли... |
|||
|
||||
| Да гость я.... |
|
|||
|
Unregistered |
Во блин, лопухнулся, не избежал конфуза... Но лучше заметить апшипку позже, чем никогда.
Короче, общие принципы изложены правильно. Но вот в определении времени жизни объекта MyClass(2,3,4) имеется тонкость Объект создан в стеке при вызове ф-ции реализующей оператор присваивания как её аргумент:
Т.е. его область видимости находится в пределах ф-ции-оператора присваивания. Стек при возврате из ф-ции очищается, ну и объект уничтожается... |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Ага, именно. А я уж было хотел прокомментировать. Добавлено @ 18:13 Блин, тема-то недельной давности оказывается. -------------------- Волны гасят ветер... |
|||
|
||||
| Fire-Plug |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
А чего, комментируй, не стесняйся. ЗЫ: Пред. пост мой - решил зарегистрироваться |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
А чего комментировать - ты уже сам исправился. -------------------- Волны гасят ветер... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |