Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Запрет на создание стековых объектов

11K
23 марта 2009 года
Babandr
76 / / 05.05.2008
Уважаемые форумцы! Абсолютно неприкладной вопрос - почему в билдере/дельфи нельзя создавать VCL-объекты на стеке, т.е. статически. Кто знает, из каких соображений так было сделано? и как этот запрет реализуется - на уровне компилятора или еще каким-то образом?
1
24 марта 2009 года
kot_
7.3K / / 20.01.2000
во первых в стеке или статически все же?
во вторых - если речь идет о стаических объектах - для VCL-объектов есть свойство Parent - т.е. родитель для данного компонента. Как вы собираетесь реализовать в случае статического создания объекта? А если компонент не требует этого - то он нормально создается. Проверьте этот код:
Код:
private:    // User declarations
static TStringList *List;
static int test;


TForm1 *Form1;
TStringList* TForm1::List = new TStringList;
int TForm1::test = 0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
List->Add(IntToStr(test));
++test;
Memo1->Lines->AddStrings(List);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 TForm1 *Fmn = new TForm1(this);
 Fmn->Show();
}
1
24 марта 2009 года
kot_
7.3K / / 20.01.2000
а если речь идет о том почему нельзя создать объект компонента (а только указатель на него), так для этого вам нужно прочесть о наследовании, о таком явлении как "срезка", о виртуальных функциях, для чего они нужны и после всего этого посмотреть на объявление методов компонента. Например:
 
Код:
void __fastcall TForm1::Form1OnClick(TObject *Sender)
...

и все вам станет понятно. И так же почему запрещено множественное наследование для билдеровских классов, вы то же сможете самостоятельно ответить.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог