![]() |
|
|
![]()
|
|
| Imidazol |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 14.5.2007 Репутация: нет Всего: нет |
почему я могу написать так:
btn[i] = new TButton; и не могу сделать то же самое со SpeedButton? btn[i] = new TSpeedButton; |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
Imidazol, нужно так, к примеру:
Это сообщение отредактировал(а) SenkraD - 20.9.2007, 17:39 |
|||
|
||||
| Sharkfire |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 30.11.2006 Где: Одесса Репутация: 2 Всего: 2 |
Очень мало информации...
если у тебя массив обычных кнопок... то их и надо создавать = new TButton(...) а если массив TSpeedButton то и соотеветсвенно = new TSpeedButton(...); Если я правильно понял! |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
Sharkfire, Imidazol, так как написано можно сделать для этого нужно написать класс производный от TButton, к примеру, и перегрузить буферизированные операторы new и delete и определить конструктор по умолчания.
Но зачем? - памяти с економим немного (это если оператор перегрузить), а проблем добавится - ибо если вы некоректно реализуете захват или, ещё хуже, освобождения - то получите ошибки, которые могут и систему накрыть. Теперь почему сделанно именно так (я так считаю): 1. Почему нет конструктора по умолчанию? - Это сделано для защиты. Заставляя передать вас компонент "овнер", они гарантируют освобождение памяти, которую занял ваш "ран-тайм" контрол - овнер его сам удалит когда будет умирать (хотя никто не запрещает передать NULL, но потом необхожимо саммому удалять созданный контрол). - Некоторые обьекты не могут быть созданые без информации из вне - может быть этот TComponent *Owner используется ещё для какой-то другой инициализации; и не передав валидного владельца вы можете ограничить его функциональность 2. Почему для создания массива кнопок, к примеру, нужно было писать как я в примере? - Это вытекает из-то что у класса нет конструктора по умолчанию (по крайней мере, открытого) Да, к слову, а вот почему на моё мнение нельзя создать обьекты VCL'я в стеке. Это классы GUI, которые кушают немало и хранить их в стеке не очень хорошая идея, поэтому это ещё можно воспринимать как ухищорения для ускорения (прикиньте как бы там стек закручивался-раскручивался) и предостережения от "стек оверфлоу" - он кажись поменьше будет чем куча. Плюс есть куча полей-указателей (Parent, Owner, ...), а хранить указатели на адреса в стеке - самоубийство (они же не постояные); а без этих полей, местами, никак, по этому без них будет плохо P.S. Кто знает где я ошибся, поправьте пожалуйста! Это сообщение отредактировал(а) SenkraD - 21.9.2007, 07:58 |
|||
|
||||
| Imidazol |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 14.5.2007 Репутация: нет Всего: нет |
Спасибо, с вашей помощью разобрался.
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |