Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.042 c
15-1161680560
pasha_golub
2006-10-24 13:02
2006.11.12
ИИ существует


2-1161985394
markers
2006-10-28 01:43
2006.11.12
OverDraw и TreeView


2-1161962845
чел
2006-10-27 19:27
2006.11.12
не отображается первичный ключ


4-1151253289
pizz_pizz
2006-06-25 20:34
2006.11.12
работа с сертификатами


15-1161916744
Slider007
2006-10-27 06:39
2006.11.12
С днем рождения ! 27 октября





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский