powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Использование class var в объекте, реализующим интерфейс
4 сообщений из 4, страница 1 из 1
Использование class var в объекте, реализующим интерфейс
    #39668391
nicholaos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Не могу понять, почему возникает ошибка Invalid pointer operation.

Есть интерфейс и класс, отнаследованный от TInterfacedObject, этот интерфейс реализующий (для простоты возьмем пустой интерфейс без методов):

interface
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  ISomeInterface = interface
  end;

  TSomeClass = class(TInterfacedObject, ISomeInterface)
  private
    //class var FCount: integer;
    FSomeObject: TObject;
  public
    constructor Create;
    destructor Destroy; override;
  end;




У этого класса есть поле-объект, создаваемое в конструкторе и уничтожаемое в деструкторе:

implementation
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
constructor TSomeClass.Create;
begin
  inherited;
  FSomeObject := TObject.Create;
end;

destructor TSomeClass.Destroy;
begin
  FSomeObject.Free;
  inherited;
end;




Используется примерно так:

implementation
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
function CreateSomeInterface: ISomeInterface;
begin
  Result := TSomeClass.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Obj1, Obj2: ISomeInterface;
begin
  Obj1 := CreateSomeInterface;
  Obj2 := CreateSomeInterface;
  try
    {}
  finally
    Obj1 := nil;
    Obj2 := nil;
  end;
end;




В таком виде ошибки не будет.

Если расскоментировать //class var FCount: integer; то возникает Invalid pointer operation.
...
Рейтинг: 0 / 0
Использование class var в объекте, реализующим интерфейс
    #39668397
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nicholaos,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  ISomeInterface = interface
  end;

  TSomeClass = class(TInterfacedObject, ISomeInterface)
  private
    class var
     FCount: integer;
    var
     FSomeObject: TObject;
  public
    constructor Create;
    destructor Destroy; override;
  end;
...
Рейтинг: 0 / 0
Использование class var в объекте, реализующим интерфейс
    #39668399
nicholaos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey,

Спасибо! Думал модификатор class var работает только на 1 строку...
...
Рейтинг: 0 / 0
Использование class var в объекте, реализующим интерфейс
    #39668405
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nicholaosДумал модификатор class var работает только на 1 строку...Чтобы не думать, нужно просто определять разные куски класса в разных секциях
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  TSomeClass = class(TInterfacedObject, ISomeInterface)
  private
    type
      TMyType = ......
  private
    class var
      FCount: integer;
  private
     FSomeObject: TObject;
  public
    constructor Create;
    destructor Destroy; override;
  end;
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Использование class var в объекте, реализующим интерфейс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]