Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помещение св-в класса в процедуры как 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо