Главная страница
    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.049 c
2-1160925543
Albenous
2006-10-15 19:19
2006.11.12
Загрузка файлов в dll


2-1161877554
AlexanderMS
2006-10-26 19:45
2006.11.12
Запретить программе отображаться на панели задач (TaskBar).


15-1161854336
Delphi)basic
2006-10-26 13:18
2006.11.12
Как в Java создать savepoint ?


2-1161690660
RomanH
2006-10-24 15:51
2006.11.12
Сортировка IBDataSet а


15-1161895131
Anatoly Podgoretsky
2006-10-27 00:38
2006.11.12
APC клиент чтения форумов





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