Вопросы переносимости и совместимости

В марте 1993 года комитет по стандартам принял динамическую идентификацию типов в качестве рабочего проекта стандарта ANSI X3J16. До сих пор, однако, лишь немногие разработчики компиляторов поддерживали стандарт RTTI (особенно для систем на базе процессоров Intel). Но теперь вам больше не придется ждать. Являясь обладателем нового пакета Borland C++ 5, вы оказываетесь в числе немногих программистов, кому доступен компилятор с полной реализацией RTTI.

К сожалению, подход большинства остальных производителей оказывается более консервативным. Хотя Borland и Microsoft предоставляют полную реализацию RTTI, производители второго ряда, такие как Symantec и Watcom, несколько отстают. Многие другие разработчики пока еще только стараются полностью реализовать стандарт RTTI в производимых ими средствах разработки. Вывод, к сожалению, по крайней мере на сегодняшний момент, достаточно очевиден: если при написании кода используются элементы RTTI, то программы могут оказаться непригодными для*компиляции на других системах или с помощью других компиляторов. Если проблемы переносимости не касаются вас непосредственно, смело применяйте элементы RTTI. В конце концов стандарт RTTI, так или иначе, должен будет войти в ANSI C++, и, следовательно, все компиляторы C++ должны будут поддерживать все его элементы.

С другой стороны, если для вас сейчас важна переносимость программ, то можно спокойно пропустить эту главу. Хотя RTTI обеспечивает большие удобства, его элементы не являются абсолютно необходимыми и стоит подождать, пока ваш любимый компилятор не обеспечит полную поддержку этих возможностей.

Объекты и жизнь

C++ позволяет программисту абстрагироваться от многих сложных задач и свести их к описанию соотношений между объектами различных классов. Такая модель, тем не менее, не работает, когда речь идет о взаимодействии людей и объектов на обыденном уровне.

Когда вы берете в руки яблоко, вы более или менее уверены, что держите яблоко, а не киви. Большинство людей обладают достаточным опытом, который позволяет им не спутать яблоко с другими фруктами.

В случае с объектами C++ ситуация оказывается сложнее. В целом программы на C++ хорошо представляют себе, с объектами какого типа они имеют дело в каждый момент времени. Если код работает правильно, инициализированный указатель на объект .Apple действительно указывает на объект Apple, а объект ведет себя так, как ожидается.