Независимая копия объекта, созданного с помощью NEW
|
|
WQ | Дата: Воскресенье, 29.08.2021, 21:06 | Сообщение # 1 |
Полковник
Группа: Проверенные
Сообщений: 215
Статус: Offline
| С помощью NEW cоздается объект произвольного типа, вроде такого: (переменная A) Код Type tTypeData As zString*100 aData(Any) Declare Sub AddText(sText As String) Declare Constructor Declare Destructor End Type
Constructor tTypeData End Constructor
Destructor tTypeData End Destructor
Sub tTypeData.AddText(sText As String) ReDim Preserve aData(UBound(aData)+1) aData(UBound(aData))=sText End Sub
Dim As tTypeData Ptr A
A = New tTypeData A->AddText("abcdef")
Dim As tTypeData Ptr B B = New tTypeData
Delete B
Delete A
Sleep
В процессе работы далее необходимо создать независимую копию этого объекта (переменная B), и после уничтожить ее с помощью DELETE Пробовал разными способами, но не получилось, чтобы исчезла зависимость от 1 объекта
Насколько я понял, нужно модифицировать сам тип, чтобы была возможность безопасно копировать
|
|
| |
haav | Дата: Понедельник, 30.08.2021, 07:29 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1372
Статус: Offline
| Так пробовал?
Код Type UDT Dim As integer i , j End Type
Dim As UDT ptr a = new UDT
Dim As UDT ptr b = new UDT
a->i = 15 a->j = 20
*b = *a
a->i = 77 a->j = 66
Print a->i, b->i , a->j , b->j
Sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
WQ | Дата: Понедельник, 30.08.2021, 16:12 | Сообщение # 3 |
Полковник
Группа: Проверенные
Сообщений: 215
Статус: Offline
| Цитата haav ( ) Так пробовал? Пробовал, в моем случае не работает Код в 1 посте только пример, на самом деле там сложная конструкция с несколькими уровнями вложенности, возможно дело в этом
|
|
| |
haav | Дата: Понедельник, 30.08.2021, 17:33 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 1372
Статус: Offline
| Если многоуровневая вложенность, может тогда попробовать вручную это делать в конструкторе копирования:
Код Type UDT Dim As integer i , j declare constructor(i as integer , j as Integer) declare constructor(Byref As UDT) End Type
constructor UDT(i as integer , j as Integer) this.i = i this.j = j End Constructor
' здесь вручную копируем все данные из передаваемого объекта ' и при необходимости выделяем память constructor UDT(Byref r As UDT) i = r.i J = r.j End Constructor
Dim As UDT ptr a = new UDT(10 , 20)
Dim As UDT ptr b = new UDT (*a)
a->i = 66
a->j = 22 ' Print a->i, b->i , a->j , b->j
Sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
WQ | Дата: Четверг, 02.09.2021, 14:17 | Сообщение # 5 |
Полковник
Группа: Проверенные
Сообщений: 215
Статус: Offline
| haav, спасибо!
В итоге, так и пришлось по всей цепочке вложенности сделать копирование
Сообщение отредактировал WQ - Четверг, 02.09.2021, 14:17 |
|
| |