Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.17 Mб
Скачать

4.1О типах данных

Типы данных языков C++/CLI, C# и Java содержат базовые типы языка С, такие как char, short, int, long, float и double. Эти типы применяются часто и поэтому данные этих типов хранятся в стеке, работа с которым наиболее эффективна. В языке Java введёны новые типы byte и boolean, а в языке C# - логический тип bool. Данные типа bool и booIean принимают значения true (истина) и false (ложь).

В языках C++/CLI, C# и Java кроме базовых типов, называемых типами по значению (value types), применяются ссылочные типы (reference types).

В языке C++/CLI, как и в языке С, применяются указатели pointers), а также дескрипторы (descriptors). Указатели и дескрипторы используются для ссылки к данным, размещённым в куче - области памяти, расположенной вне программы. Если каждое данное, находящееся в стеке увеличивает программный код, то данные кучи не меняет размер программы. Поэтому большинство данных, особенно громоздких, желательно помещать в кучу. Язык C++/CLI использует неуправляемую кучу (unmanaged heap или С++ heap) и управляемую кучу (managed heap). Неуправляемая куча не управляется системой - размещение данных в неуправляемой куче полностью определяется программистом. Для размещения данных в неуправляемой куче в языке С++ применяются операторы new и delete, о которых будет рассказано в разделе 4.4.

Опыт программирования показал, что использование указателей приводит к массе ошибок, даже у опытных программистов. Например, при обращении к данным в куче неправильное приращение значения указателя приводит к обращению к другим данным кучи или за границы кучи. Часто также позабывают удалять уже ненужные данные, вызывая переполнение кучи.

Учитывая только что сказанное, создатели языков Java и C# решили отказаться от неуправляемой кучи и заменили её управляемой кучей (managed heap). Данные в управляемой куче контролируются системой, которая также выявляет наличие уже непотребных данных и периодически их удаляет. В языках Java и C# в управляемую кучу помещаются только объекты. Если появляется необходимость заслать в управляемую кучу данное базового типа, то предварительно оно должно быть преобразовано в объект, для чего, например, в языке Java применяются специальные классы-оболочки Boolean, Byte, Character, Short, Integer, Long, Float и Double, а в языках C# и C++/CLI - боксирование (boxing).

Размещение данных в неуправляемой и управляемой кучах рассмотрено в разделе 4.4, а о применении классов-оболочек и боксировании (boxing) в разделе 6.6.

Надо сказать, что язык C++/CLI платформы .NET включает специальные ключевые слова, позволяющие наряду с неуправляемыми данными создавать и применять управляемые данные. Как было сказано выше, язык C++/CLI содержит две кучи - неуправляемую и управляемую. Наличие управляемых кучи и данных делает возможным, применяя .NET технологию, создавать надёжные и безопасные программы. Если же появилась необходимость создать небезопасную, но эффективную программу, то язык C++/CLI позволяет воспользоваться неуправляемым кодом и неуправляемой кучей.

При необходимости одна часть C++/CLI программы может состоять только из неуправляемого кода, а другая - из управляемого кода. Для связи этих частей применяют так называемые прокси (proxy) - особые объекты специальных классов-оболочек.