Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
ВнизПомещение св-в класса в процедуры как 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.049 c