Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Как можно получить копию объекта? (число прочтений - 5992 )
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Как можно получить копию объекта?
06. Мая 2008 :: 05:59
Печать  
т.е. у меня есть экземпляр объекта и мне нужна его точная копия. Можно как-нибудь это сделать?
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Как можно получить копию объекта?
Ответ #1 - 06. Мая 2008 :: 06:24
Печать  
Делаешь полиморфный метод класса, типа Clone(), который конструирует и возвращает идентичный объект.
Называется это чудо "виртуальный конструктор".
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как можно получить копию объекта?
Ответ #2 - 06. Мая 2008 :: 06:28
Печать  
kms писал(а) 06. Мая 2008 :: 06:24:
Делаешь полиморфный метод класса, типа Clone(), который конструирует и возвращает идентичный объект.
Называется это чудо "виртуальный конструктор".

Это понятно, но это работает медленно, у меня создается очень много экземпляров класса
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как можно получить копию объекта?
Ответ #3 - 07. Мая 2008 :: 01:50
Печать  
kms писал(а) 06. Мая 2008 :: 06:24:
Делаешь полиморфный метод класса, типа Clone(), который конструирует и возвращает идентичный объект.
Называется это чудо "виртуальный конструктор".


to kms По этому поводу хотелка: можно такой метод добавить в класс Структура? Я понимаю что этот класс давно не развивается но было бы удобно.
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как можно получить копию объекта?
Ответ #4 - 07. Мая 2008 :: 03:56
Печать  
Nick писал(а) 06. Мая 2008 :: 06:28:
kms писал(а) 06. Мая 2008 :: 06:24:
Делаешь полиморфный метод класса, типа Clone(), который конструирует и возвращает идентичный объект.
Называется это чудо "виртуальный конструктор".

Это понятно, но это работает медленно, у меня создается очень много экземпляров класса

Много копий ОДНОГО И ТОГО ЖЕ класса ?
Создай объект, заполни его значениями, и юзай ЗначениеВСтрокуВнутр / ЗначениеИзСтрокиВнутр - кеширование создания Улыбка
Реально шустрее будет работать, пробовал для некоторых объектов типа ТЗ/СЗ и еще каких-то
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как можно получить копию объекта?
Ответ #5 - 07. Мая 2008 :: 03:58
Печать  
artbear писал(а) 07. Мая 2008 :: 03:56:
Nick писал(а) 06. Мая 2008 :: 06:28:
kms писал(а) 06. Мая 2008 :: 06:24:
Делаешь полиморфный метод класса, типа Clone(), который конструирует и возвращает идентичный объект.
Называется это чудо "виртуальный конструктор".

Это понятно, но это работает медленно, у меня создается очень много экземпляров класса

Много копий ОДНОГО И ТОГО ЖЕ класса ?
Создай объект, заполни его значениями, и юзай ЗначениеВСтрокуВнутр / ЗначениеИзСтрокиВнутр - кеширование создания Улыбка
Реально шустрее будет работать, пробовал для некоторых объектов типа ТЗ/СЗ и еще каких-то

Кстати, на этом основано включенное при загрузке 1С++ ускорение создания объектов типа ТЗ или СЗ Улыбка Реальное ускорение создания по сравнению со штатной 1С
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как можно получить копию объекта?
Ответ #6 - 07. Мая 2008 :: 04:42
Печать  
Цитата:
Много копий ОДНОГО И ТОГО ЖЕ класса ?
Создай объект, заполни его значениями, и юзай ЗначениеВСтрокуВнутр / ЗначениеИзСтрокиВнутр - кеширование создания 
Реально шустрее будет работать, пробовал для некоторых объектов типа ТЗ/СЗ и еще каких-то


А разве для КОП эти методы работают?
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как можно получить копию объекта?
Ответ #7 - 07. Мая 2008 :: 05:56
Печать  
Для КОП пока не работают, но возможно, что скоро заработают Улыбка
kms кое-что раскопал.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как можно получить копию объекта?
Ответ #8 - 07. Мая 2008 :: 05:57
Печать  
Кстати, создай-ка баг в багзилле "Сделать полную копию объекта КОП"
Подумаю над этим, интересная тема.
Вроде бы не должно быть сложно.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как можно получить копию объекта?
Ответ #9 - 07. Мая 2008 :: 07:30
Печать  
artbear писал(а) 07. Мая 2008 :: 05:57:
Кстати, создай-ка баг в багзилле "Сделать полную копию объекта КОП"
Подумаю над этим, интересная тема.
Вроде бы не должно быть сложно.


Ок
http://www.1cpp.ru/bugs/show_bug.cgi?id=3820
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Как можно получить копию объекта?
Ответ #10 - 07. Мая 2008 :: 08:48
Печать  
Что есть точная копия объекта?

Данные-члены любого агрегатного объекта можно инициализировать по значению, и по ссылке.

К примеру, ТЗ - член класса как должна копироваться?
По ссылке, или путем создания новой ТЗ и загрузки из существующей?

И такой вопрос возникает для КАЖДОГО члена агрегатного объекта.
Кто ответит на него вне метода класса, инкапсулирущего операцию копирования?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как можно получить копию объекта?
Ответ #11 - 07. Мая 2008 :: 08:59
Печать  
Это да, фигня получается Печаль
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Как можно получить копию объекта?
Ответ #12 - 07. Мая 2008 :: 12:04
Печать  
Nick писал(а) 07. Мая 2008 :: 08:59:
Это да, фигня получается Печаль

Как вариант, есть еще стратегия "copy-on-write".
Смысл там в том, что объекты копируются по ссылке до тех пор, пока они не модифицируются.
В момент модификации ресурс, которым владеют несколько объектов, копируется по значению, а счетчик ссылок оригинала уменьшается.

Конечно, в среде 1С, где нет прегрузки операторов, это заморочно делать (хотя можно).
И пока, к сожалению, неизвестно, как это ложится на твою задачу.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как можно получить копию объекта?
Ответ #13 - 07. Мая 2008 :: 12:09
Печать  
kms писал(а) 07. Мая 2008 :: 12:04:
Конечно, в среде 1С, где нет прегрузки операторов, это заморочно делать (хотя можно).

Какой-нибудь пример или более полное описание можно?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Как можно получить копию объекта?
Ответ #14 - 07. Мая 2008 :: 12:25
Печать  
artbear писал(а) 07. Мая 2008 :: 12:09:
kms писал(а) 07. Мая 2008 :: 12:04:
Конечно, в среде 1С, где нет прегрузки операторов, это заморочно делать (хотя можно).

Какой-нибудь пример или более полное описание можно?

Перегрузку операторов в 1С не сделать, а copy-on-write, я думаю, полно примеров можно найти.
Вопрос в том, будет ли Nick заморачиваться этим, и вообще подходит ли ему такая схема.

Как пример, кстати - это реализовано в классе CString, если я правильно помню.
Ну, и некоторых других реализациях классов для работы со строками.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать