Текущий архив: 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