Мне интересно, какова продолжительность жизни/момент, когда память восстанавливается для анонимного объекта, такого как этот:
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 в моем случае.
Известно ли вам, что вы цитируете раздел Советы по внедрению, в котором используется слово следует? Это не гарантии, указанные в спецификации.
Кроме того, откуда вы взяли, что память освобождается в конце области видимости типа? Вы не путаете тип с подпулом хранения?
Нет, я не обращал внимания на конкретный подраздел. Я могу немного путать. Так что я могу предположить ... ничего, в конце концов?
Если вам нужны гарантии, почему бы вам не использовать именованный тип доступа? Кроме того, поскольку ваше предположение о том, что память восстанавливается, когда тип выходит за рамки, неверно, имеет ли это значение?
Дополнительную информацию по этой теме можно найти здесь; в частности, автоматически освобождается только пространство, выделенное в стеке выполнения.
Читать. Ok. Спасибо за ссылку.