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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2010, 23:14   #11
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от RoS Посмотреть сообщение
А как по мне - тут самое удивительное, что конструктор вызывался меньше раз, чем деструктор о_О
Это как раз не удивительно - при передаче в функцию вызывается неявно созданный конструктор копии, а не обычный конструктор.
Ну а во втором случае, видимо, объект создаётся прямо в стеке вызываемой функции?.. Интересная оптимизация, при чём происходит даже при отключённых оптимизациях, то ли свойство языка, то ли баго-фича компилятора )
netrino вне форума Ответить с цитированием
Старый 17.01.2010, 23:37   #12
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

[QOUTE]"неявно созданный конструктор копии"[/QOUTE]

Как это понять? конструтор не может быть неявно созданным, если ты его определил, то твой конструктор и вызывется, и при создании локальной копии объекта в функции тоже должен был вызваться конструктор, который определил программист...

Получается, что однажды вызвался конструктор без параметров, вопрос в том - когда?!

И еще такой домысл - в вызове создается безымянный объект, для негго нужен конструтор, а потом в функции создается локальная копия безымянного объекта, и опять же конструктор вызваться должен был? возможно, конструктор копирования, который и был определен, стало быть ничего выводить не должен был - отсюда две надписи дестр и одна констр....
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 17.01.2010, 23:58   #13
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от RoS Посмотреть сообщение
[QOUTE]"неявно созданный конструктор копии"[/QOUTE]

Как это понять? конструтор не может быть неявно созданным, если ты его определил, то твой конструктор и вызывется, и при создании локальной копии объекта в функции тоже должен был вызваться конструктор, который определил программист...

Получается, что однажды вызвался конструктор без параметров, вопрос в том - когда?!

И еще такой домысл - в вызове создается безымянный объект, для негго нужен конструтор, а потом в функции создается локальная копия безымянного объекта, и опять же конструктор вызваться должен был? возможно, конструктор копирования, который и был определен, стало быть ничего выводить не должен был - отсюда две надписи дестр и одна констр....
Понять так, что если явно не определить конструктор, деструктор или копирующий конструктор, то они будут автоматически неявно сгенерированы компилятором. Соответственно, при вызове функции, вызывается тот самый неявно сгенерированный конструктор копии ) Ясное дело, он не выводит ничего на консоль, потому видно только два вызова деструктора и лишь один конструктора
netrino вне форума Ответить с цитированием
Старый 18.01.2010, 00:07   #14
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Ну да, с этим не спорю, деструктор, конструктор копирования, просто конструктор, оператор "=" создаются неявно для любого класса
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 18.01.2010, 16:00   #15
Юра_YUYU
 
Регистрация: 16.01.2010
Сообщений: 8
По умолчанию

Да особо удивительного тут нет ничего. В первом случае вызывается конструктор копии по умолчанию, который создаёт побитовую копию объекта, второй раз вызывается конструктор копии, который присутствует в классе. При передаче объекта функкции или возврате объекта из функции вызываются именно конструкторы копии, а не обычные конструкторы. Если бы вызывались обычные конструкторы, то объек терял бы свою индивидуальность при передаче в функцию.
Юра_YUYU вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си++. Передача массива в функцию. Diamond2107 Помощь студентам 7 03.12.2009 20:15
Передача поля объекта в процедуру в качестве параметра Голованов Д. Microsoft Office Excel 10 02.11.2009 16:22
Передача массива в функцию D[I]K Общие вопросы C/C++ 4 13.09.2009 21:31
передача массива в функцию JOFRIF Общие вопросы C/C++ 8 02.08.2009 12:46
Передача массива в функцию Vistar Общие вопросы C/C++ 1 27.04.2009 08:08