Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Явно вызываемый конструктор уничт. сосзд. обьект.? 
:(
    Опции темы
En_t_end
Дата 6.3.2005, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 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
PM MAIL ICQ Skype GTalk Jabber   Вверх
srd
Дата 6.3.2005, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 27
Всего: 49



Сначала конструктор MyClass создаст временный объект, потом будет вызван оператор присваивания (перегруженный или сгенерированный по-умолчанию) и содержимое временного объекта будет скопировано в объект classmy, потом для временного объекта будет вызван деструктор и объект будет разрушен. Сам конструктор ничего не разрушает.


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
En_t_end
Дата 6.3.2005, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



srd
Спасибо!
Для меня было важным, что временный обьект все-таки уничтожается.
Цитата
Сам конструктор ничего не разрушает.

Это я ступил smile
PM MAIL ICQ Skype GTalk Jabber   Вверх
Да гость я....
Дата 12.3.2005, 07:59 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
1) ...можно ли утверждать, что данный темпо-обьект будет находиться в памяти до закрытия приложения ?
2) ...было важным, что временный обьект все-таки уничтожается


Видите ли, оба утверждения содержат неточности. Чтобы ответить на вопрос о времени жизни объекта следует привлечь такие понятия как:
1) область видимости (scope)
2) класс памяти объекта

Общее правило таково: объект создается, когда встречается его объявление и уничтожается, когда его имя выходит из области видимости.
Поэтому автоматические объекты "живы" только до момента выхода из блока, где были объявлены. А вот глобальные объекты (т.е. объявленные за пределами ф-ций), а также объекты объявленные как static в теле ф-ции(блоке) находятся в памяти процесса (не динамической!) вплоть до его закрытия.

Теперь по вашему вопросу.
Автоматический объект без имени созданный и инициализированный как MyClass(2,3,4) будет жив вплоть до выхода из блока, где вы его объявили. Если этот блок ф-ция main(), то вплоть до выхода из ф-ции, т.е. до закрытия приложения. В противном случае - его время жизни будет меньше, чем продожительность процесса.

Автоматический объект конечно будет уничтожен при выходе из блока, но согласно вашему примеру, этот "временный" объект проживет почти ровно столько, сколько и объект с именем classmy, к-рый является его копией.
"почти ровно столько" означает, что "временный" объект был создан в стеке сразу после classmy, поэтому когда "временный" объект будет разрушен на выходе из блока, то classmy помрёт сразу вслед за ним.
Принцип LIFO, знаете ли...
  Вверх
Да гость я....
Дата 12.3.2005, 09:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Во блин, лопухнулся, не избежал конфуза... Но лучше заметить апшипку позже, чем никогда.

Короче, общие принципы изложены правильно.
Но вот в определении времени жизни объекта MyClass(2,3,4) имеется тонкость
Объект создан в стеке при вызове ф-ции реализующей оператор присваивания как её аргумент:

Код

classmy.operator=(MyClass(2,3,4));


Т.е. его область видимости находится в пределах ф-ции-оператора присваивания.
Стек при возврате из ф-ции очищается, ну и объект уничтожается... smile

  Вверх
Fantasist
Дата 15.3.2005, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата
Т.е. его область видимости находится в пределах ф-ции-оператора присваивания.


Ага, именно. А я уж было хотел прокомментировать. smile
Добавлено @ 18:13
Блин, тема-то недельной давности оказывается.




--------------------
Волны гасят ветер...
PM MAIL   Вверх
Fire-Plug
Дата 16.3.2005, 04:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 15.3.2005

Репутация: -1
Всего: 0



Цитата
А я уж было хотел прокомментировать


А чего, комментируй, не стесняйся.
ЗЫ: Пред. пост мой - решил зарегистрироваться

PM MAIL   Вверх
Fantasist
Дата 16.3.2005, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата(Fire @ 16.3.2005, 01:28)
А чего, комментируй, не стесняйся.


А чего комментировать - ты уже сам исправился. smile


--------------------
Волны гасят ветер...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0543 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.