Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Конструктор копирования Добавлено: 25.05.05 11:18  

Автор вопроса:  LamerOnLine | ICQ: 334781088 
Ну, тема такая - нужно создать копию существующего объекта. Присваивать можно только указатель на существующий объект, при передаче объекта byVal все равно передается ссылка. Как можно создать копию объекта без поэлементного копирования?

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 ANDREY Z5Z



Вопросов: 38
Ответов: 125
 Web-сайт: save-games.info
 Профиль | | #1
Добавлено: 25.05.05 11:33
Как насчет ObjPtr(Ptr)?
Функция ObjPtr служит для получения указателя на объект (адрес объекта в памяти). Возвращает данные типа Long, содержащие указатель на объект. Ptr - Обязательный аргумент - объектная переменная, указатель на которую требуется получить.
Dim col As New Collection
Dim obj As CPerson
' create a new CPerson object and add it to the collection
Set obj = New CPerson
obj.Name = "John Smith"
col.Add obj, CStr(ObjPtr(obj)) ' ключ должен быть строкой
col.Remove CStr(ObjPtr(obj))

Ответить

Номер ответа: 2
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #2 Добавлено: 25.05.05 14:54
Спасибо, конечно, за справку, но она тут совсем не уместна. Я знаю что такое ObjPtr, но как его применить в данной ситуации.
Поясню еще раз. Мне не нужно запихнуть объект в коллекцию, мне нужно создать новый объект - копию предыдущего. То есть, чтобы все члены объекта Obj1 были идентичны членам Obj2. С ObjPtr я могу разве что заменить указатель на vtbl, что опять же эквивалентно ссылке на объект. Мне же надо создать новый.
Надеюсь в этот раз понятно объяснил.

Ответить

Номер ответа: 3
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #3 Добавлено: 25.05.05 16:17
Никак не сделать без поэлементного копирования.
Собственно, вынесенный в заголовок темы конструктор копирования обычно занимается именно этим.

Ответить

Номер ответа: 4
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #4 Добавлено: 25.05.05 17:38
Оно понятно, но если подумать над нестандартными решениями. Дело в том, что конструктор копирования определяется в самом классе, мне же надо копировать эземпляр произвольного класса даже не имея понятия о его членах. Может стоит копать в сторону выделения памяти и CopyMemory?

Ответить

Номер ответа: 5
Автор ответа:
 Nash Bridges



Вопросов: 5
Ответов: 139
 Профиль | | #5 Добавлено: 26.05.05 10:50
Ну никак. Это ты спрашивал на исходниках? Там же сказали, что никак. Это дело внутреей организации объекта. Единственное, IPersist. Но этот интерфейс не обязан поддерживаться или корректно работать.

Ответить

Номер ответа: 6
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #6 Добавлено: 26.05.05 11:22
Не, не я. Кроме того, если люди говорят что никак - это еще не значит НИКАК, это значит что они просто не знают :)

Ответить

Номер ответа: 7
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #7 Добавлено: 27.05.05 05:11
Иногда действительно не знают.

Никак, потому что
1. Ты не знаешь, какой размер в памяти занимает объект
2. Объект может содержать указатели, и в этом случае конструктор копирования должен создать также копии тех вещей, на которые эти указатели указывают. А "те вещи" тоже могут содержать указатели. В том числе и на друг друга, а также на первоначально клонируемый объект.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам