FreeBasic
Главная
Вход
Регистрация
Суббота, 20.07.2024, 09:30Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Независимая копия объекта, созданного с помощью NEW
WQДата: Воскресенье, 29.08.2021, 21:06 | Сообщение # 1
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 1362
Репутация: 49
Статус: 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
Репутация: 7
Статус: Offline
Цитата haav ()
Так пробовал?
Пробовал, в моем случае не работает
Код в 1 посте только пример, на самом деле там сложная конструкция с несколькими уровнями вложенности, возможно дело в этом
 
haavДата: Понедельник, 30.08.2021, 17:33 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1362
Репутация: 49
Статус: 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
Репутация: 7
Статус: Offline
haav, спасибо!

В итоге, так и пришлось по всей цепочке вложенности сделать копирование


Сообщение отредактировал WQ - Четверг, 02.09.2021, 14:17
 
  • Страница 1 из 1
  • 1
Поиск: