Главная arrow С++ (часть 3) arrow Некоторые ограничения

Некоторые ограничения

Далее перечислены некоторые ограничения использования указателей типа GCPtr.
? Вы не можете создавать глобальные объекты типа GCPtr. Напоминаю, что глобальный объект выходит за пределы области видимости, когда завершается программа. Когда глобальный указатель GCPtr выйдет за пределы области видимости, его деструктор вызовет функцию collect о для очистки неиспользуемой памяти. Возможна проблема, зависящая от реализации вашего компилятора языка С++: список gclist может уже быть удален. В этом случае действия функции collectO вызовут ошибку этапа выполнения Следовательно, указатели типа GCPtr следует применять только для создания локальных объектов.
? Создавая динамически размещенные массивы, вы должны указать размер массива при объявлении указателя GCPtr, ссылающегося на него. К сожалению, нет механизма проверки соблюдения этого требования, поэтому будьте внимательны.
О Не следует пытаться освободить память, на которую указывает объект типа GCPtr с помощью явного выполнения операции delete. Если память нужно очистить немедленно, вызовите функцию collect ().
О Объект GCPtr должен указывать только на динамически выделенную память с помощью операции new. Присваивание объекту GCPtr указателя, ссылающегося на любую другую память, вызовет ошибку при выходе объекта GCPtr за пределы области видимости, так как будет предпринята попытка освободить память, которая никогда не выделялась.
О Лучше избегать циклических ссылок по причинам, описанным ранее в этой главе. Несмотря на то, что вся выделенная память периодически очищается, объекты, содержащие циклические ссылки, остаются размещенными в ней до завершения программы, вместо того чтобы удаляться, как только они перестают использоваться программными элементами.