8 / 8 / 2
Регистрация: 14.01.2013
Сообщений: 141
|
||||||||||||||||
Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту?18.01.2013, 00:05. Показов 2385. Ответов 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
|
Каратель
![]() |
||||||
19.01.2013, 02:51 | ||||||
1
|
Каратель
![]() |
|
19.01.2013, 04:03 | |
1
|
19.01.2013, 04:03 | |
Помогаю со студенческими работами здесь
20
Привязать элемент к другому объекту Движение объекта к другому объекту Передача объектов в качестве параметров другому объекту Как сделать перемещение объекта к другому объекту Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
|
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
|
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
|
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
|
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
|
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
|
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
|
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг.
Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя.
Странные серые краски проникают и. . .
|
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
|
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
|