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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2011, 01:04   #11
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

Цитата:
Сообщение от Janym Посмотреть сообщение
Копия не вызовет конструктор, а только деструктор.

Не понятно другое, зачем по мимо временной переменной r компилятор ещё где-то создаёт переменную..
спросите компилятор, g++ дает такой список
Код:
Constr MyBase1 0xbfa6fd12
Constre MyBase2 0xbfa6fd12
Constre base3 0xbfa6fd12
Constr MyDelClass 0xbfa6fd12
addr of o: 0xbfa6fd12
addr of r: 0xbfa6fd13
Destr base3 0xbfa6fd13
Destr MyBase2 0xbfa6fd13
Destr MyBase1 0xbfa6fd13
Destr MyDelClass 0xbfa6fd12
Destr base3 0xbfa6fd12
Destr MyBase2 0xbfa6fd12
Destr MyBase1 0xbfa6fd12
alex_x_x вне форума Ответить с цитированием
Старый 28.02.2011, 01:06   #12
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

Цитата:
Сообщение от Janym Посмотреть сообщение
Код:
MyBase3 o1
MyDelClass o2;
o1 = o2;
никаких лишних деструкторов не вызывается.
а ты попробуй
Код:
MyBase3 o1;
MyBase3 o2=o1;
onewho вне форума Ответить с цитированием
Старый 28.02.2011, 01:13   #13
Janym
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 22
По умолчанию

Цитата:
спросите компилятор, g++ дает такой список
Код:


Constr MyBase1 0xbfa6fd12
Constre MyBase2 0xbfa6fd12
Constre base3 0xbfa6fd12
Constr MyDelClass 0xbfa6fd12
addr of o: 0xbfa6fd12
addr of r: 0xbfa6fd13
Destr base3 0xbfa6fd13
Destr MyBase2 0xbfa6fd13
Destr MyBase1 0xbfa6fd13
Destr MyDelClass 0xbfa6fd12
Destr base3 0xbfa6fd12
Destr MyBase2 0xbfa6fd12
Destr MyBase1 0xbfa6fd12
А вот это как раз верный результат. Значит, Студийный компилятор чё-то мудрит..
Janym вне форума Ответить с цитированием
Старый 28.02.2011, 01:17   #14
Janym
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 22
По умолчанию

Цитата:
MyBase3 o1;
MyBase3 o2=o1;
Проверил, тоже всё ок, два деструктора как и должно быть.
Janym вне форума Ответить с цитированием
Старый 28.02.2011, 01:21   #15
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

2 деструктора и 1 конструктор! (без КК)
onewho вне форума Ответить с цитированием
Старый 28.02.2011, 01:26   #16
Janym
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 22
По умолчанию

Так оно и есть 2 деструктора и 1 констр.
Janym вне форума Ответить с цитированием
Старый 28.02.2011, 03:07   #17
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
может ты имел ввиду void myFunc(const MyClass &x) ?
да, ошибся под шафе
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 28.02.2011, 03:12   #18
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Народ, да что вы тупите! Вызывается копирующий конструктор! Если в классе нет явно объявленных копирующих конструкторов, то класс имеет неявно объявленный копирующий конструктор.

Неявно объявленный копирующий конструктор вида Class(const Class &other), который генерирует компилятор, делает для всех полей класса поле=other.поле. Если ты объявишь Class(const Class &other) и сделаешь там вывод типа "Вызван компирующий конструктор Class", то всё поймёшь

А конструктор без параметров сюда никакого отношения не имеет. Он используется в других случаях.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 28.02.2011, 03:45   #19
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

Цитата:
Сообщение от Obey-Kun Посмотреть сообщение
Народ, да что вы тупите! Вызывается копирующий конструктор! Если в классе нет явно объявленных копирующих конструкторов, то класс имеет неявно объявленный копирующий конструктор.

Неявно объявленный копирующий конструктор вида Class(const Class &other), который генерирует компилятор, делает для всех полей класса поле=other.поле. Если ты объявишь Class(const Class &other) и сделаешь там вывод типа "Вызван компирующий конструктор Class", то всё поймёшь

А конструктор без параметров сюда никакого отношения не имеет. Он используется в других случаях.
ВНЕЗАПНО ты четвертый в теме, кто сказал про копирующий конструктор
alex_x_x вне форума Ответить с цитированием
Старый 28.02.2011, 03:48   #20
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Ну просто надо было пояснить насчёт его неявного объявления, этого никто не сделал.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение свойств объекта не активируя его ndvikulov Microsoft Office Excel 16 16.09.2010 20:14
Передача метода объекта. the_deer_one Общие вопросы C/C++ 8 09.09.2010 15:07
Можно ли в макрос передать имя объекта, его вызывающего buagbu Microsoft Office Excel 3 16.04.2010 08:54
Передача объекта в функцию Юра_YUYU Общие вопросы C/C++ 14 18.01.2010 16:00
Проверка объекта после его уничтожения AHTuKiLLeR Общие вопросы Delphi 1 19.06.2009 10:43