Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2009, 14:49   #1
sunnmas
 
Регистрация: 03.08.2009
Сообщений: 6
По умолчанию assigned(some)

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Contnrs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var ls: TObjectList;
    a: TObject;
begin
  ls:=TObjectList.Create(false);
  if assigned(a) then
    showmessage('0');
  a:=TObject.Create;
  ls.Add(a);
  if assigned(a) then
    showmessage('1');
  if assigned(ls.Items[0]) then
    showmessage('2');
  a.Free;
  if assigned(a) then
    showmessage('3');
  if assigned(ls.Items[0]) then
    showmessage('4');
  ls.Destroy;
end;

end.
Почему я вижу 01234? хочу только 12. Как? особенно не хочу видеть 4, при этом remove/delete нельзя вызывать

Последний раз редактировалось Stilet; 05.08.2009 в 15:22.
sunnmas вне форума Ответить с цитированием
Старый 05.08.2009, 15:23   #2
NieL
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 116
По умолчанию

Цитата:
Сообщение от sunnmas Посмотреть сообщение
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Contnrs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var ls: TObjectList;
a: TObject;
begin
ls:=TObjectList.Create(false);
if assigned(a) then
showmessage('0');
a:=TObject.Create;
ls.Add(a);
if assigned(a) then
showmessage('1');
if assigned(ls.Items[0]) then
showmessage('2');
a.Free;
if assigned(a) then
showmessage('3');
if assigned(ls.Items[0]) then
showmessage('4');
ls.Destroy;
end;

end.

Почему я вижу 01234? хочу только 12. Как? особенно не хочу видеть 4, при этом remove/delete нельзя вызывать
В строке a.Free ты только освобождаешь используемую объектом память, сама объектная ссылка в Nil не устанавливается. Чтобы ее выставить в Nil юзай процедуру FreeAndNil.
NieL вне форума Ответить с цитированием
Старый 05.08.2009, 15:26   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так легче?
Код:
unit Unit1;

interface

uses             Contnrs,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  var ls: TObjectList;
    a: TObject;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin
  ls:=TObjectList.Create(false);
  if assigned(a) then
    showmessage('0');
  a:=TObject.Create;
  ls.Add(a);
  if assigned(a) then
    showmessage('1');
  if assigned(ls.Items[0]) then
    showmessage('2');
  a:=nil;
  if assigned(a) then
    showmessage('3');
   ls.Items[0]:=a;
  if assigned(ls.Items[0]) then
    showmessage('4');
  ls.Destroy;
end;

end.
Вообще что это за задача? По-моему дурная как сало без хлеба...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.08.2009, 15:26   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вообще то эта процедура проверяет указатель на nil
потому все вполне закономерно
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка Left Side cannot be assigned to.. DM_bite Помощь студентам 1 18.09.2008 21:01