Поиск сообщества
Показаны результаты для тегов 'Generic'.
Найдено: 2 результата
-
Добрый день. Хочу узнать как правильно возвращать объекты в функции, что бы не было утечки памяти. Данная проблема на данный момент воспроизводится в проекте TelegaPI. Ниже упрощенный код с проекта для запросов на сервер: function TTelegramBot.API<T>(const Method: String; Parameters: TDictionary<String, TValue>): T; var lHttp: THTTPClient; lHttpResponse: IHTTPResponse; lApiResponse: TtgApiResponse<T>; lURL_TELEG: String; begin lHttp := THTTPClient.Create; try lURL_TELEG := 'https://api.telegram.org/bot' + FToken + '/' + Method; // Преобразовуем параметры в строку, если нужно if Assigned(Parameters) then lHttpResponse := lHttp.Post(lURL_TELEG, ParamsToFormData(Parameters)) else lHttpResponse := lHttp.Get(lURL_TELEG); lApiResponse := TtgApiResponse<T>.FromJSON(lHttpResponse.ContentAsString); Result := lApiResponse.ResultObject; finally FreeAndNil(lHttp); { Ниже утечка памяти. Если расскоментировать - тогда не будет возращаться результат функций } // if Assigned(lApiResponse) then // lApiResponse.Free; end; end; В таком виде не освобождается lApiResponse - в результате утечка памяти. Если раскоментировать 2 последние строки - тогда в результате функции будет пустой объект. Прошу опытных людей в этом плане рассказать что мне нужно подправить. Спасибо.
-
Как в результат функции установить значение? Ниже набросок функции которая возвращает массив значений с типом переданным пользователем: function TArrayHelper<T>.Generate(const Count: Integer): TArray<T>; var Info: PTypeInfo; I: Integer; AI: TArray<Integer>; begin Info := System.TypeInfo(T); SetLength(Result, Count); // Для дробных if Info.Kind = TTypeKind.tkFloat then for I := Low(Result) to High(Result) do Result[I] := Random; // Для целых if Info.Kind = TTypeKind.tkInteger then for I := Low(Result) to High(Result) do Result[I] := Random(100); end; Вообще такое можно сделать? Или лучше будет(хотя не мне это не очень то и нравится) сделать что бы возвращала функция массив вариантов: function TArrayHelper<T>.Generate(const Count: Integer): TArray<TValue>; Надеюсь суть вопроса понятна.