Введение указателей в С обеспечило успех этого языка программирования. Работа
суказателями— очень мощная возможность. Старые программисты на машинных язы-
ибыли несказанно рады, получив в свои руки такой инструмент. В С++ возможности работы с указателями унаследованы без изменений от С.
Ксожалению, ни программист, ни программа не в состоянии отличить хороший ука затель от плохого. Прочтите память по неинициализированному указателю— и ваша программа аварийно завершится, если, конечно, вам повезет... Если не повезет— она продолжит работу, сочтя случайный блок памяти корректным объектом...
Проблемы, связанные с указателями, трудно локализовать. Зачастую программа с не корректным указателем при каждом новом запуске ведет себя по-новому.
С# решает проблемы, связанные с указателями, очень просто — он попросту устраня ет их из языка. Используемые вместо них ссылки безопасны с точки зрения типов и не могут быть применены так, чтобы это приводило к краху программы.
Если вы сравните новые обобщенные возможности С# (см. главу 15, "Обобщенное программирование") с шаблонами С++, то обнаружите высокую степень схожести их (интаксиса. Однако хотя оба средства имеют общее предназначение, такое сходство яв ляется чисто внешним.
Как обобщенные классы, так и шаблоны безопасны с точки зрения типов, но реализованы они совершенно по-разному. Шаблоны инстанцируются в про цессе компиляции, в то время как инстанцирование обобщенных классов происходит во время выполнения программы. Это означает, что один и тот же шаблон в разных модулях дает в результате два различных типа, инстанцированных во время компиляции. Но один и тот же обобщенный класс в разных модулях дает только один тип, инстанцируемый во время выполне ния. Это приводит к меньшему "раздутию" кода для обобщенных классов по сравнению с шаблонами.
Наибольшее различие между обобщенными классами и шаблонами состоит пом, что обобщенные классы работают с несколькими языками, включая Visual Basic, С++ и другие языки .NET, в том числе С#. Шаблоны же используются только (рамках С++.
Что же лучше? Шаблоны более мощны — и более сложны, как и множество других идей в С++, но и больше подвержены ошибкам. Обобщенные классы проще в испольювании и реже приводят к ошибкам в программах.
Конечно, это всего лишь некоторые тезисы бурной дискуссии. Существенно большую информацию можно найти в блоге Брендона Брея (Brandon Bray) по адресу weblogs . a s p . n e t / b r a n b r a y / a r c h i v e / 2 0 0 3 / 1 1 / 1 9 / 5 1 0 2 3 . a s p x .