Главная страница
    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.051 c
2-1161956417
svg
2006-10-27 17:40
2006.11.12
Внешний вид даты в табл. SQL базы


2-1161773761
kulkse
2006-10-25 14:56
2006.11.12
частная очередь сообщений


2-1161774672
KyRo
2006-10-25 15:11
2006.11.12
Долгий коннект из за чего ?


2-1161697378
JTAG
2006-10-24 17:42
2006.11.12
Народ подскажите плз как сделать так чтобы в редакторе EDIT


15-1161153013
LaidBack
2006-10-18 10:30
2006.11.12
Можно застрелиться...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский