Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.30;
Скачать: CL | DM;

Вниз

Как лучше написать код?   Найти похожие ветки 

 
arche   (2003-10-20 10:28) [0]

вот есть такаяконструкция:

type
TMyType = record
myStr: String;
myArray: Array of String;
end;

как лучше ее юзать? Есть три варианта (см ниже).

-----------------

type
PMyType = ^TMyType; {типа указатель и все такое}
TMyType = record
myStr: String;
myArray: Array of String; { здесь тоже непонятно - вроде как это указаткль на массив получается(судя по code completion)?? Почему? ???}
end;

function UseMyType(...): TMyType;
procedure Stuff(..); { в этой процедуре эти три варианта создания переменной типа TMyType }
...

procedure Stuff(..);
var
myP:PMyType;
myT: TMyType;
begin

{чем отличаются следующие три способа, и что лучше использовать? ???И что с памятью происходит в каждом случае? Может что-то вообще лучше не юзать?}
{первый способ:}
{1}
New(myP);
myP^.String:= " строка ";
SetLength(myP^.myArray, 2); { точно не помню как SetLength пишется, но смысл-задаем длину = 2}
myP^.myArray[0]:= 2;
...
Dispose(myP);
{/1}
{и второй:}
{2}
myT.String:= " строка ";
SetLength(myT.myArray, 2);
myT.myArray[0]:= 2;
{/2}
{и третий:}
{3}
myT:= UseMyType(...);
{/3}

end;

function UseMyType(...): TMyType;
begin
Result.myStr:= " строка ";
SetLength(Result.myArray, 2); { точно не помню как SetLength пишется, но смысл-задаем длину = 2}
Result.myArray[0]:="0";
Result.myArray[1]:="1";
end;


Может вопросы глупые, но мне очень нужно разобраться в этом. Помогите советом плиз...


 
arche   (2003-10-20 12:56) [1]

так как лучше писать?
Чем отличается вариант с указателем от варианта 2 и 3?


 
jack128 ©   (2003-10-20 13:04) [2]


> так как лучше писать?

В твоем примере я бы выбрал второй вариант

> Чем отличается вариант с указателем от варианта 2 и 3?

в первом случае переменная распологается в куче, в двух других - в стеке


 
arche   (2003-10-20 13:18) [3]

> В твоем примере я бы выбрал второй вариант

А чем плох третий вариант?

И могут ли быть проблемы с высвобождением памяти в третьем варианте?

И еще одинважный вопрос: А что будет лучше, передавать сложную структуру в качестве переменной в процедуре, или возвращать в качестве значения функции?


 
jack128 ©   (2003-10-20 13:28) [4]


> А чем плох третий вариант?
ничем

> И могут ли быть проблемы с высвобождением памяти в третьем
> варианте?
нет, все освободится автоматом, в отличие от первого варианта..

> И еще одинважный вопрос: А что будет лучше, передавать сложную
> структуру в качестве переменной в процедуре, или возвращать
> в качестве значения функции?

опять же без разницы


 
Rouse_ ©   (2003-10-20 13:28) [5]

> И еще одинважный вопрос:
Все зависит от конкретно поставленной задачи, иногда проще передавать по ссылке, иногда по значению. Иногда в качестве результата выполнения функции использовать... тут разные есть варианты.

Желаю успехов


 
arche   (2003-10-20 13:30) [6]

Спасибо, что помогли разобраться!



Страницы: 1 вся ветка

Текущий архив: 2003.10.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
7-98910
DimaK
2003-08-06 13:26
2003.10.30
Перезагрузка


7-98890
Zhenka
2003-08-14 08:46
2003.10.30
Панель управления->Язык и стандарты вкладка - Числа


3-98490
hursand
2003-10-08 17:23
2003.10.30
Как обнавить DBgrid


1-98596
Ландграф Павел
2003-10-19 20:16
2003.10.30
Написать функцию возвращающую динамический массив


4-98940
CIH
2003-08-24 09:22
2003.10.30
Как вызвать стандартные диалоги?