Реализация C++ std::string

Приветствую.
Пытался реализовать строки string C++ на паскале. Что хочется добиться от таких строк.
Строка содержит массив char оканчивающаяся на 0.
Цель:
1. Строка должна уметь очищаться. (С++ реализации в индекс 0 присваивается символ 0)
2. При добавлении строки, строка расширяется на размерность *2 *3 и т.д
Мне это нужно, для написания парсеров. Когда на вход принимаются строки в буфер, после обработки, буфер очищается заполняется новой строкой. Буфер выделяю один раз к примеру 64 кб.
Реализация ниже, не работает. В консоль выводится абракадабра.
Пытался реализовать строки string C++ на паскале. Что хочется добиться от таких строк.
Строка содержит массив char оканчивающаяся на 0.
Цель:
1. Строка должна уметь очищаться. (С++ реализации в индекс 0 присваивается символ 0)
2. При добавлении строки, строка расширяется на размерность *2 *3 и т.д
Мне это нужно, для написания парсеров. Когда на вход принимаются строки в буфер, после обработки, буфер очищается заполняется новой строкой. Буфер выделяю один раз к примеру 64 кб.
Реализация ниже, не работает. В консоль выводится абракадабра.
- Код: Выделить всё
{$mode objfpc}{$H+}
program Main;
uses
Classes,
SysUtils,
LDL;
type
FTString = class
private
Data : array of Char;
Total: LongWord;
Posit: LongWord;
public
function StrLen(const Source: PChar): LongWord;
constructor Create(const Source: PChar);
function ToChars(): PChar;
end;
function FTString.StrLen(const Source: PChar): LongWord;
var
i: LongWord;
begin
i := 0;
while (Source[i] <> #0) do
begin
inc(i);
end;
Result := i;
end;
constructor FTString.Create(const Source: PChar);
var
i: LongWord;
begin
Posit := StrLen(Source);
Total := Posit + 1;
SetLength(Data, Total);
for i := 0 to Posit do
begin
Data[i] := Source[i];
end;
Data[Posit] := #0;
end;
function FTString.ToChars(): PChar;
begin
Result := @Data;
end;
var
Buffer: FTString;
begin
Buffer := FTString.Create('Hello World!');
WriteLn(Buffer.ToChars());
end.