Что происходит в FreePascal, если поле F класса C назначено указателю P после того, как P установлен на ноль?

Цель состоит в том, чтобы добавить список ребер в граф, используя экземпляры TList. TList - это стандартный класс списков в FreePascal, с интерфейсом итератора и другими удобствами существ.

Вот моя идея в коде FreePascal:

PROGRAM PassPointerToClass;
TYPE
  class C
  // ...
  public
    F : TList;
  end; // end of class definition

VAR
  P : TList;
  i : integer;

BEGIN
  O := C.Create;
  i := 2;
  P := TList.Create;
  P.Add(@i);
  O.F := P;
  P := Nil;
END.

Является

  1. F = Nil
  2. F ^ [0] = 2 или
  3. что-то другое?

1 ответ

Решение

P - указатель на класс, выделенный для кучи. OF присваивается то же значение, что и P.

Установка P в ноль не влияет на выделенный объект кучи.

OF все еще указывает на этот объект, и F[0]^ равен 2.

Другие вопросы по тегам