Простая структура данных: различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
Gxoptg (обсуждение | вклад) м небольшое визуальное исправление |
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;
Для чего нужно разделение
Различать простые и управляемые типы данных нужно с такими целями.
- Для связи между двумя библиотеками времени выполнения. В частности — для передачи данных из программы в программу, из плагина в плагин. Конечно же, менеджер памяти не должен заниматься управлением в той памяти, которая ему не принадлежит.
- Для связи с кодом, написанным на старых языках без поддержки автоматического управления памятью (в частности, Си).
- Только простые типы могут находиться в
union
(в Паскале соответственноrecord/case
).
В C++
С C++11
Простыми типами считаются все, кроме:
- новых строк неограниченной длины (
AnsiString
,WideString
,UnicodeString
); - интерфейсов COM;
- динамических массивов;
- типов, которые содержат один из этих трёх;
- новых объектов типа
class
. Впрочем,TObject
,TButton
и т. д. — это указатели на объект и являются простыми типами!
Это заготовка статьи о компьютерных языках. Помогите Википедии, дополнив её. |