![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помещение св-в класса в процедуры как var параметр.
Riply © (2006-10-26 15:19:00)Здравствуйте !
Допустим, есть класс TMyData:
type
TMyData = class
private
FpData: Pointer;
public
property pData: Pointer read FpData write FpData;
end;
При попытке вызвать, например, ReallocMem(Data.pData, 1024); компилятор ругается
на невозможность помещения констант как переменных.
Как это можно избежать ?
Loginov Dmitry (2006-10-26 19:41:00) [1]Riply © (26.10.06 15:19)
При попытке вызвать, например, ReallocMem(Data.pData, 1024); компилятор ругается
на невозможность помещения констант как переменных.
Как это можно избежать ?
ReallocMem(Pointer(Pointer(@Data.pData)^), 1024);
Допускается использовать только если в read и write указывается поле класса.
Anatoly Podgoretsky (2006-10-26 18:42:00) [2]А мы спорим property или свойство
Riply (2006-10-26 18:40:00) [3]P.S. Ну чего вы спорите ?
Там же ясно написано "property" :))))
Riply (2006-10-26 18:34:00) [4]>[10] han_malign © (26.10.06 16:31)
Спасибо.
А "не получится выделить новый блок памяти" возможно
в том случае, если pData исходно неверный указатель,
или еще и в других случаях ?
han_malign (2006-10-26 16:31:00) [5]
> Мне хотелось обойтись без "лишних переменных" :))
Data.pData:= SysReallocMem(Data.pData, 1024);
- но это чревато утечкой памяти, если не получится выделить новый блок памяти
Anatoly Podgoretsky (2006-10-26 16:22:00) [6]Не важно как внутри, у них различная семантика, вот ее и надо понимать, а не как внутри.
Это просто свойство и ничего более.
Ketmar (2006-10-26 15:58:00) [7]>[7] Anatoly Podgoretsky(c) 26-Oct-2006, 15:51
>Ни то ни другое, это свойство!
я в курсе формы Земли. %-) отсюда у меня кавычки в ответе. ну, начну я щаз рассказывать, как оно в ливере компилятора обрабатывается. кому станет легче?
Anatoly Podgoretsky (2006-10-26 15:51:00) [8]
> Ketmar © (26.10.06 15:36) [5]
Ни то ни другое, это свойство!
Anatoly Podgoretsky (2006-10-26 15:50:00) [9]
> Как это можно избежать ?
Просто не использовать и еще одно замечание в классе нет переменных, там только члены класса.
Ketmar (2006-10-26 15:36:00) [10]>[0] Riply(c) 26-Oct-2006, 15:19
всё верно. property -- это не макроподстановки. это такой "псевдотип", который... и ты ды. %-)
Riply (2006-10-26 15:34:00) [11]>Джо © (26.10.06 15:28)
Так я и делаю, прсто стало интересно.
Riply (2006-10-26 15:31:00) [12]Спасибо. Это я понимаю :)
Мне хотелось обойтись без "лишних переменных" :))
Джо (2006-10-26 15:28:00) [13]Замечание по проектированию.
Не лучше ли этот ReallocMem проделывать внутри класса TMyData? Как-то странно оно передавать свойства объекта в такие функции, как ReallocMem...
Сергей М. (2006-10-26 15:25:00) [14]var
TmpPtr: Pointer;
..
TmpPtr := Data.pData;
ReallocMem(TmpPtr, ...);
Data.pData := TmpPtr;