Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: 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 вся ветка

Текущий архив: 2006.11.12;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.032 c
2-1161786196
Kos135
2006-10-25 18:23
2006.11.12
Создание компонента Delphi по шелчку мыши


2-1161851146
dest81
2006-10-26 12:25
2006.11.12
access & bde


15-1162011397
Rbn
2006-10-28 08:56
2006.11.12
AutoCad


2-1161968029
Max.66RUS
2006-10-27 20:53
2006.11.12
Пара простых вопросов...


2-1161863963
Fostr
2006-10-26 15:59
2006.11.12
Динамическое создание компонента