когда освобождаются компоненты анонимного доступа составных типов?

avatar
Mehdi Saada
7 апреля 2018 в 23:50
74
0
0

Мне интересно, какова продолжительность жизни/момент, когда память восстанавливается для анонимного объекта, такого как этот:

type Cell_Type is abstract tagged limited record
   Where : Coordinates_Array; -- 2D array
   Contents : access String;
end CELl_TYPE;

Cell_type также предназначен для создания с помощью распределителей. Я знаю правило (или так думаю, поправьте меня, если я ошибаюсь) для именованных типов доступа, то есть пул восстанавливается, когда заканчивается область определения типа (не подтипа). А как насчет анонимных объектов доступа? В правилах сказано: Пул хранения, используемый для распределителя анонимного типа доступа, должен определяться следующим образом: 25.1/2 : [сорасширения, я понял]

25.2/2: Для других дискриминантов доступа и параметров доступа пул памяти должен создаваться в точке распределителя и освобождаться, когда выделенный объект становится недоступным; [Я не думаю, что это имеет значение здесь... Мой случай не кажется дискриминантом доступа, хотя синтаксис кажется похожим]

25.3/3 [доступ к функциям возврата, не имеет значения]

25.4/2: В противном случае пул хранения по умолчанию должен быть создан в точке, где разрабатывается анонимный тип доступа; такой пул хранения не должен поддерживать освобождение отдельных объектов.

Итак? Когда «Содержимое» освобождается, тогда ?

  • A: В самом конце программы?

  • Или B: когда тип "cell_type" выходит за рамки? Что для определения уровня библиотеки будет означать конец области создания экземпляра библиотеки... что будет означать A в моем случае.

Источник
flyx
9 апреля 2018 в 14:42
0

Известно ли вам, что вы цитируете раздел Советы по внедрению, в котором используется слово следует? Это не гарантии, указанные в спецификации.

flyx
9 апреля 2018 в 14:49
0

Кроме того, откуда вы взяли, что память освобождается в конце области видимости типа? Вы не путаете тип с подпулом хранения?

Mehdi Saada
10 апреля 2018 в 12:59
0

Нет, я не обращал внимания на конкретный подраздел. Я могу немного путать. Так что я могу предположить ... ничего, в конце концов?

flyx
10 апреля 2018 в 13:13
0

Если вам нужны гарантии, почему бы вам не использовать именованный тип доступа? Кроме того, поскольку ваше предположение о том, что память восстанавливается, когда тип выходит за рамки, неверно, имеет ли это значение?

trashgod
10 апреля 2018 в 17:14
0

Дополнительную информацию по этой теме можно найти здесь; в частности, автоматически освобождается только пространство, выделенное в стеке выполнения.

Mehdi Saada
11 апреля 2018 в 14:09
0

Читать. Ok. Спасибо за ссылку.

Ответы (0)