Вниз
Скачать: CL | DM;

Помещение св-в класса в процедуры как var параметр.   Найти похожие ветки 

← →
Riply ©   (2006-10-26 15:19) [0]

Здравствуйте !
Допустим, есть класс TMyData:
type
TMyData = class
 private
  FpData: Pointer;
 public
  property pData: Pointer read FpData write FpData;
 end;

При попытке вызвать, например, ReallocMem(Data.pData, 1024); компилятор ругается
на невозможность помещения констант как переменных.
Как это можно избежать ?


← →
Сергей М. ©   (2006-10-26 15:25) [1]

var
 TmpPtr: Pointer;
..

 TmpPtr := Data.pData;
 ReallocMem(TmpPtr, ...);
 Data.pData := TmpPtr;


← →
Джо ©   (2006-10-26 15:28) [2]

Замечание по проектированию.
Не лучше ли этот ReallocMem проделывать внутри класса TMyData? Как-то странно оно передавать свойства объекта в такие функции, как ReallocMem...


← →
Riply ©   (2006-10-26 15:31) [3]

Спасибо. Это я понимаю :)
Мне хотелось обойтись без "лишних переменных" :))


← →
Riply ©   (2006-10-26 15:34) [4]

>Джо ©   (26.10.06 15:28)
Так я и делаю, прсто стало интересно.


← →
Ketmar ©   (2006-10-26 15:36) [5]

>[0] Riply(c) 26-Oct-2006, 15:19
всё верно. property -- это не макроподстановки. это такой "псевдотип", который... и ты ды. %-)


← →
Anatoly Podgoretsky ©   (2006-10-26 15:50) [6]


> Как это можно избежать ?

Просто не использовать и еще одно замечание в классе нет переменных, там только члены класса.


← →
Anatoly Podgoretsky ©   (2006-10-26 15:51) [7]


> Ketmar ©   (26.10.06 15:36) [5]

Ни то ни другое, это свойство!


← →
Ketmar ©   (2006-10-26 15:58) [8]

>[7] Anatoly Podgoretsky(c) 26-Oct-2006, 15:51
>Ни то ни другое, это свойство!
я в курсе формы Земли. %-) отсюда у меня кавычки в ответе. ну, начну я щаз рассказывать, как оно в ливере компилятора обрабатывается. кому станет легче?


← →
Anatoly Podgoretsky ©   (2006-10-26 16:22) [9]

Не важно как внутри, у них различная семантика, вот ее и надо понимать, а не как внутри.

Это просто свойство и ничего более.


← →
han_malign ©   (2006-10-26 16:31) [10]


> Мне хотелось обойтись без "лишних переменных" :))

Data.pData:= SysReallocMem(Data.pData, 1024);
- но это чревато утечкой памяти, если не получится выделить новый блок памяти


← →
Riply ©   (2006-10-26 18:34) [11]

>[10] han_malign ©   (26.10.06 16:31)
Спасибо.
А "не получится выделить новый блок памяти" возможно
в том случае, если pData исходно неверный указатель,
или еще и в других случаях ?


← →
Riply ©   (2006-10-26 18:40) [12]

P.S. Ну чего вы спорите ?
Там же ясно написано "property" :))))


← →
Anatoly Podgoretsky ©   (2006-10-26 18:42) [13]

А мы спорим property или свойство


← →
Loginov Dmitry ©   (2006-10-26 19:41) [14]

Riply ©   (26.10.06 15:19)
При попытке вызвать, например, ReallocMem(Data.pData, 1024); компилятор ругается
на невозможность помещения констант как переменных.
Как это можно избежать ?


ReallocMem(Pointer(Pointer(@Data.pData)^), 1024);

Допускается использовать только если в read и write указывается поле класса.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.03 c
15-1161807382
TButton
2006-10-26 00:16
2006.11.12
мастерам php =)


1-1159527550
khibinite
2006-09-29 14:59
2006.11.12
Создание тулбаров для IE средствами Delphi


2-1161796894
Rey_Mysterio
2006-10-25 21:21
2006.11.12
TMemo: поиск строки


15-1161736913
PHPDeveloper
2006-10-25 04:41
2006.11.12
mail.ru


2-1161971120
rar
2006-10-27 21:45
2006.11.12
название текущей схемы




   Наверх