Virtual and dynamic methods
Покажіть різницю між цими поняттями. Я прочитав, що одні з них більш продуктивні, тоді як інші найкращі використовують пам'ять. Мене цікавить аспекти реалізації цих двох методів. І ще, що в С++ називалося virtual в Дельфі? Virtual чи dynamic?
Якісь відмінності в огранізації таблиці віртуальних методів. Точніше не знаю: ( А навіщо такі тонкощі? Мені здається, якби це мало значення, то в help-е було б звернено на це увагу.
Цікаво. Чому С++ вистачило лише virtual, а розробники Delphi вирішили запровадити два поняття - virtual і dinamic. Значить навіщо це було треба.
Virtual versus dynamic
Virtual and dynamic methods є semantically equivalent. Вони різняться тільки в виконанні метод-call dispatching at runtime. Virtual methods optimize for speed, while dynamic methods optimize for code size. У загальному, віртуальних методах є найбільш ефективним способом до здійснення polymorphic behavior. Dynamic methods є useful when a base class declares many overridable methods which are inherited by many descendant classes in application, але only occasionally overridden.
Це все я вже читав (що я і наголосив у першому своєму повідомленні). Про те, коли та що використовувати питання у мене не викликає. Питання, чому це саме так. Відповідь у реалізації dynamic і virtual функцій - відповідно й питання у тому, як вони реалізовані. А з люб'язно наведеної тобою цитати я не можу отримати такої інформації.
Втім, все одно дякую. :)
Ну типу для віртуальних методів використовується таблиця VMT, а для динамічних - DMT, та й коротше VMT важить більше, зате по ній метод шукається швидше
У класі DMT зберігаються покажчики тільки на ті методи, яківизначено у даному класі. Отже, при виклику успадкованого його потрібно знайти, переглядаючи послідовно всі класи-предки. Натомість заощаджується пам'ять. VMT зберігає покажчики на всі останні версії віртуальних методів класу (а може і взагалі всі версії, я досконально не вникав, але, думаю, навряд чи). Швидко, але витрата пам'яті більша. Жодної іншої різниці мені не відомо.
Может, Ви тогда еше об'ясніть, як граняться message handlers (процід. hyerarchii) etot method nuzhen. Pravil"no? (Konechno, ne schitaya "chestnych" messages.)
>Alex4444444444 (06.11.02 16:52)Обробники повідомлень - динамічні методи, якщо я нічого не плутаю. Індексом для них є ідентифікатор повідомлення. Повідомлень занадто багато і їх обробники часто перекриваються – нерозумно було б робити їх віртуальними.