powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Выполнение без ошибки.
11 сообщений из 36, страница 2 из 2
Выполнение без ошибки.
    #39740316
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Промешан_Каких типов? Можно пример управляемого?
Управляемые: строки, дин.массивы, интерфейсы, варианты (с ARC ещё и объекты).
...
Рейтинг: 0 / 0
Выполнение без ошибки.
    #39740317
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonФэйтл Эрапропущено...

Расскажи, пожалуйста - как это проверить?

Как ни странно: if self = nil then ... :)

Да неужели?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
...

type
  TMyClass = class
    procedure Test;
  end;

procedure TMyClass.Test;
begin
  WriteLn(Integer(Self));
end;

var
  mc: TMyClass;
begin
  mc := TMyClass.Create;
  mc.Free;

  mc.Test; // <-- что тут будет напечатано?
  ...
...
Рейтинг: 0 / 0
Выполнение без ошибки.
    #39740369
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAndNil в помощь. Ну а любителям хранения зомби-ссылок никто уже не поможет. Ни тут ни вообще :)
...
Рейтинг: 0 / 0
Выполнение без ошибки.
    #39740415
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonFreeAndNil в помощьНе спасет от неинициализированной переменной
Код: pascal
1.
2.
3.
4.
var
  mc: TMyClass;
begin
  mc.Test; // <-- что тут будет напечатано?
...
Рейтинг: 0 / 0
Выполнение без ошибки.
    #39740446
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эраmakhaon...внутри метода можно проверить - создан ли сэлф или нет и если нет...
Расскажи, пожалуйста - как это проверить?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TObject.Free;
begin
// under ARC, this method isn't actually called since the compiler translates
// the call to be a mere nil assignment to the instance variable, which then calls _InstClear
{$IFNDEF AUTOREFCOUNT}
  if Self <> nil then
    Destroy;
{$ENDIF}
end;
...
Рейтинг: 0 / 0
Выполнение без ошибки.
    #39740473
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,
спасёт. если инициализировать нилом.
Квейд,
собственно, да...
...
Рейтинг: 0 / 0
Выполнение без ошибки.
    #39740577
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon_Vasilisk_,
спасёт. если инициализировать нилом.
...
Каким образом неинициализированному объекту можно установить значение свойства (Self)?
...
Рейтинг: 0 / 0
Выполнение без ошибки.
    #39740596
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эраmakhaon_Vasilisk_,
спасёт. если инициализировать нилом.
...
Каким образом неинициализированному объекту можно установить значение свойства (Self)?

Дело в том, что это "волшебное" свойство, оно является значением содержимого переменной классового типа, а не свойством экземпляра объекта. То есть, неинициализированный указатель не будет nil. И, чтобы понять, что класс не был создан, переменную класса следует сперва инициализировать нилом... как-то не очень умно? :)

Но этот фокус с self никак не поможет в случае использования алиасов (когда две переменные по дизайну указывают на один объект)

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
type 
  X = class
    метод;
  end;
var
  a, b : C;
...
begin
  a := C.Create();
...
  b := a; // Алиас
...
  FreeAndNil(a);
...
  b.метод; // Ничего не знает, что self теперь nil
  
...
Рейтинг: 0 / 0
Выполнение без ошибки.
    #39740624
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эра,

А ты не бери прямой адрес.
...
Рейтинг: 0 / 0
Выполнение без ошибки.
    #39740628
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эраmakhaon_Vasilisk_,
спасёт. если инициализировать нилом.
...
Каким образом неинициализированному объекту можно установить значение свойства (Self)?

mc := nil;

рекомендую взять отладчик и посмотреть, там всё отлично видно.
...
Рейтинг: 0 / 0
Выполнение без ошибки.
    #39740629
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mc, если что, это и есть ссылка на Self. Не на класс, а на экземпляр класса.
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Выполнение без ошибки.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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