|
8 / 8 / 2
Регистрация: 14.01.2013
Сообщений: 141
|
||||||||||||||||
Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту?18.01.2013, 00:05. Показов 2775. Ответов 22
Метки нет (Все метки)
Это можно :
Вот полный код :
0
|
||||||||||||||||
| 18.01.2013, 00:05 | |
|
Ответы с готовыми решениями:
22
Как обратиться к созданному объекту, если переменной присвоен уже другой объект? Как прикрепить линию к объекту и провести к другому объекту? Почему конструктор вызывается при присвоении объекта другому объекту |
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 18.01.2013, 00:08 | |
|
Потому что как только вы объявляете свой конструктор, стандартная копировалка убирается. Чтобы определить свою, определяйте метод Array& Array::operator=(const Array &other), который и выполнит копирование полей из объекта other в текущий (и вернёт этот же текущий, return *this;).
1
|
|
|
100 / 100 / 47
Регистрация: 19.11.2012
Сообщений: 195
|
|||||||
| 18.01.2013, 00:14 | |||||||
1
|
|||||||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 18.01.2013, 01:10 | |
|
Ага, но только mydata у них общий. Умрёт один объект и отберёт у второго данные. А по-хорошему объект должен снять копию со всего массива. Ну или обеспечить его неудаление, пока на него кто-то ссылается.
1
|
|
|
8 / 8 / 2
Регистрация: 14.01.2013
Сообщений: 141
|
|||||||||||
| 18.01.2013, 01:53 [ТС] | |||||||||||
|
Всем спасибо! С конструктором копий и выделением под него нового массива, что бы деструктор первого объекта не удалил его, разобрался. Но вот не понял как он себя вызывает бесконечно, если в его объявлении указать не ссылку на объект, а просто объект, то есть не
Можете на пальцах объяснить порядок действий или почему так происходит?
0
|
|||||||||||
|
8 / 8 / 2
Регистрация: 14.01.2013
Сообщений: 141
|
|
| 18.01.2013, 18:33 [ТС] | |
|
Jupiter. То есть он будет восприниматься как ещё один конструктор, а не конструктор копирования и он будет выполнятся после первого конструктора, потому что количество конструкторов неограниченно, если у них разные параметры. А как конструктор получит объект на втором проходе(когда сам себя будет вызывать)? Почитав о рекурсии, все ровно не до конца понимаю как это будет выглядеть на примере с объектом.
Если вам не сложно, то могли бы вы привести какой-то схематический пример как это выглядит в памяти, что копируется, куда и зачем или на словах описать поподробней?
0
|
|
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||||
| 18.01.2013, 19:02 | ||||||||
0
|
||||||||
|
8 / 8 / 2
Регистрация: 14.01.2013
Сообщений: 141
|
||
| 19.01.2013, 00:17 [ТС] | ||
|
С обычными переменными понятно. А вот что копируется из одного объекта в другой так, что при этом вызывается ещё одно копирование, не понятно. Допустим значение должно копироваться в параметр Array(Array a) , то есть это равносильно тому, если в main будет b=a , а потом получается что при копировании объекта "a" в объект "b", объект b дойдет до этого же конструктора Array(Array a) и снова запустить копирование b=a. Даже если это так, то я не понимаю как это выглядит за ширмой, то есть на этапе компиляции, когда уже нету классов. И как по мне, то далеко не уехать, с таким пониманием данного вопроса, по этому и спрашиваю.
0
|
||
|
|
|
| 19.01.2013, 00:43 | |
|
0
|
|
|
8 / 8 / 2
Регистрация: 14.01.2013
Сообщений: 141
|
|
| 19.01.2013, 01:04 [ТС] | |
|
Kuzia domovenok, из-за чего тогда происходит бесконечный вызов?
P.S. Я может быть задаю глупые вопросы, но в моем понимании не хватает какой-то детали, которую возможно вы все здесь считают очевидной и не нужной для объяснения. По этому и прошу максимально подробно описать что происходит в момент копировании и почему это заставляет повторно вызывать копирование.
0
|
|
|
|
||||||
| 19.01.2013, 01:14 | ||||||
|
во-первых, есть разница между присвоением и конструированием копии. Похоже, ты до сих пор не уловил это и говоришь не о том, о чём тебе говорят
1
|
||||||
|
8 / 8 / 2
Регистрация: 14.01.2013
Сообщений: 141
|
|
| 19.01.2013, 02:34 [ТС] | |
|
Kuzia domovenok, ясно, спасибо за уточнение, но это не дает ответа на мой вопрос. Почему конструктор вызывается бесконечно, если в его параметр передать объект по значению, то есть не по ссылке Array(Array &a), а по значению Array(Array a). Не важно, что это не работает. Меня интересует как это устроено и за счет чего идет бесконечный вызов, а то я встречал только упоминания о нем, а развернутого ответа не нашел, возможно он очевиден, но я его не могу понять. Ещё раз подчеркиваю, мне важно понять как это устроено, а не просто оставить это на поверхностном уровне понимания.
0
|
|
|
Каратель
|
||
| 19.01.2013, 02:37 | ||
|
копии объектов классов конструируются конструктором копирования, потому если конструктор копирования принимал бы параметр по значению то и возникла бы бесконечная рекурсия
1
|
||
|
8 / 8 / 2
Регистрация: 14.01.2013
Сообщений: 141
|
|
| 19.01.2013, 02:46 [ТС] | |
|
Jupiter, а как бы тогда выглядела реализация такого такого конструктора копирования?
0
|
|
|
Каратель
|
||||||
| 19.01.2013, 02:51 | ||||||
1
|
||||||
|
8 / 8 / 2
Регистрация: 14.01.2013
Сообщений: 141
|
||
| 19.01.2013, 03:16 [ТС] | ||
|
Jupiter, спасибо! Хотелось бы уточнить ещё один момент.
0
|
||
|
Каратель
|
|
| 19.01.2013, 04:03 | |
|
1
|
|
| 19.01.2013, 04:03 | |
|
Помогаю со студенческими работами здесь
20
Привязать элемент к другому объекту Движение объекта к другому объекту Передача объектов в качестве параметров другому объекту Как сделать перемещение объекта к другому объекту Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|