Простая структура данных: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м небольшое визуальное исправление
м отмена правки 42131256 участника Gxoptg (обс) не то
Строка 23: Строка 23:
end;
end;
</source>
</source>



== Для чего нужно разделение ==
== Для чего нужно разделение ==

Версия от 17:41, 26 февраля 2012

Простой тип данных (англ. plain old data, POD) — в современных языках программирования высокого уровня тип данных, не требующий автоматического управления. Переменные такого типа можно копировать простыми процедурами копирования участков памяти наподобие memcpy.

Проще всего простой тип данных определить от противного. Если при появлении переменной нужно вызвать конструктор, или при исчезновении нужно вызвать деструктор, или при копировании — особую процедуру копирования, это не простой тип.

В стандартном Паскале и Си все типы данных рассматриваются как простые. Если же управление памятью всё-таки нужно, программисту приходится вместо

var
  a : TSomeStruc;
begin
  a := b;
end;

писать

var
  a : TSomeStruc;
begin
  StrucInit(a);
  StrucCopy(a,b);
  StrucDone(a);
end;

Для чего нужно разделение

Различать простые и управляемые типы данных нужно с такими целями.

  1. Для связи между двумя библиотеками времени выполнения. В частности — для передачи данных из программы в программу, из плагина в плагин. Конечно же, менеджер памяти не должен заниматься управлением в той памяти, которая ему не принадлежит.
  2. Для связи с кодом, написанным на старых языках без поддержки автоматического управления памятью (в частности, Си).
  3. Только простые типы могут находиться в union (в Паскале соответственно record/case).

В C++

Простыми типами считаются все, кроме:

  • новых строк неограниченной длины (AnsiString, WideString, UnicodeString);
  • интерфейсов COM;
  • динамических массивов;
  • типов, которые содержат один из этих трёх;
  • новых объектов типа class. Впрочем, TObject, TButton и т. д. — это указатели на объект и являются простыми типами!