次の宣言を持つ次のカスタムリストがあると仮定しましょう。
type
TCustomList = class(TObjectList)
private
function GetItem(AIndex: Integer): TMyObject; // virtual;
procedure SetItem(Index: Integer; AObject: TMyObject);
...
public
property Items[Index: Integer]: TMyObject read GetItem write SetItem;
procedure InsertSort();
end;
次の実装では:
implementation
function TCustomList.GetItem(AIndex: Integer): TMyObject;
begin
Result := TMyObject(inherited Items[AIndex]);
end;
procedure TCustomList.SetItem(Index: Integer; AObject: TMyObject);
begin
inherited Items[Index]:= AObject;
end;
procedure TCustomList.InsertSort;
var
i, j: integer;
key: TMyObject;
begin
for j := 1 to self.Count - 1 do
begin
key:= self.Items[j];
i := j - 1;
while ((i >= 0) AND (self.Items[i].Compare(key)>0)) do
begin
self.Items[i+1]:= self.Items[i]; // does not WORK!!! properly.. System.Contnrs problem ??
i := i-1;
end; // while
self.Items[i+1]:= key;
end; // for
end; // procedure InsertSort
のインスタンスのコレクションに対してコードを実行するとTMyObject
、invalid-pointer-operation例外が発生します。TCustomList
これは、 viaItems
プロパティの要素の読み取りと書き込みが不十分なことが原因であると私は信じています。
このinvalid-pointer-operation例外が表示されるのはなぜですか?