В общем, нет, но общий случай не является общим случаем. Вот почему автоматические схемы, такие как RAII, были изобретены в первую очередь.
Работа программиста заключается в выражении
вещи элегантно на его языке
выбор.
C ++ имеет очень хорошую семантику для
строительство и уничтожение
объекты в стеке. Если ресурс
может быть выделен на срок
область видимости, значит, хороший программист
вероятно, пойдет по этому пути наименьшего
сопротивление. Время жизни объекта
ограничены фигурными скобками, которые, вероятно,
все равно уже там.
Если нет хорошего способа поставить
объект прямо в стеке, может быть
может быть помещен в другой объект как
член. Теперь его время жизни немного
дольше, но C ++ все еще многое делает
автоматически. Время жизни объекта
ограничен родительским объектом -
проблема была делегирована.
Хотя, возможно, не один родитель.
Следующая лучшая вещь - это последовательность
приемные родители. Это то, что
auto_ptr
для. Все еще довольно хорошо,
потому что программист должен знать
какой конкретный родитель является владельцем.
Время жизни объекта ограничено
время жизни его последовательности
владельцы. Один шаг вниз по цепочке в
детерминизм и сама по себе элегантность
shared_ptr
: время жизни ограничено
союз пула владельцев.
> Но, возможно, этот ресурс не
одновременно с любым другим объектом, установите
объектов, или поток управления в
система. Он создан на каком-то событии
происходит и разрушается на другом
событие. Хотя есть много
инструменты для определения продолжительности жизни
делегации и другие жизни, они
не достаточно для вычисления любого
произвольная функция. Итак, программист
может решить написать функцию
несколько переменных, чтобы определить,
объект появляется или
исчезают, и звоните new
и
delete
.
Наконец, написание функций может быть
жесткий. Может быть, правила, регулирующие
объект займет слишком много времени и
память на самом деле вычислить! И это
может быть просто очень трудно выразить
их элегантно, возвращаясь к моему
исходная точка. Так что для этого у нас есть
сборка мусора: объект
время жизни ограничено тем, когда вы хотите
это, а когда нет.