![]() |
|
Модераторы: bsa |
![]()
|
|
| Mongol17 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 10.11.2008 Репутация: нет Всего: нет |
Когда то, в некой статье встретил рядом с сточкой:
MyClass* ptrObject = new MyClass; //здесь, если я ничего не путаю, сначала выделяется память под объект MyClass, //затем этот объект создается и затем адрес выделенной памяти сохраняется в указателе. вот такую запись: MyClass Object_1 = MyClass(value); из комментария следовало что в данном случаи будет создан временный объект, который будет скопирован в Object_1. Для проверки этого утверждения написал код:
и вот вывод программы...
прокомментируйте пожалуйста, создается ли при этом все таки временный объект или нет? P.S. Что бы не отвлекать честной народ всякими такими мелочами, хотел бы посмотреть ассемблерный код. Но вот не знаю как это сделать(компилятор g++) Думаю что и литература имеется, вопрос этот освещающая. Хотел бы имена авторов узнать За ответы заранее все спасибо. |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Создание ассемблерного кода:
Когда ты не указываешь ключевое слово explicit у конструктора копирования, то операция MyClass s = MyClass(123); эквивалентна MyClass s(123). Так как ты не создал свой собственный конструктор копирования, то компилятор подставил стандартный, который пропускает создание временного объекта. Да и потом, когда ты пишешь MyClass s = MyClass(123), то вызывается конструктор копирования, а ты об этом даже и не узнаешь, так как он отработает молча. Короче, создай свой конструктор копирования и поэкспериментируй с explicit (указывается перед декларацией конструктора). |
|||
|
||||
| Mongol17 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 10.11.2008 Репутация: нет Всего: нет |
в file.s -- формат отображения не читабельный.
Этот код я убрал с первого листинка так как он все равно не отрабатывался. Пробовал добавлять explicit, видимых изменений не обнаружил. Это сообщение отредактировал(а) Mongol17 - 1.2.2010, 10:21 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Попробуй добавить ключ -S.
Что-то я стормозил. конструктор копирования не нужно делать explicit. Иначе компилироваться не будет. Попробуй сделать два класса A и B, причем так, что B можно сконструировать из A. Затем выполни B b = A(). И поэкспериментируй с explicit у конструктора B(const A&). Кстати, не забудь определить оператор присваивания для класса B. |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Не уверен что он нужен... -------------------- вопросов больше чем ответов |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Леопольд, он нужен для того, чтобы видеть, когда работает конструктор, а когда копирование через присваивание.
|
|||
|
||||
| Mongol17 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 10.11.2008 Репутация: нет Всего: нет |
bsaМожно подробней, что кого, куда?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |