Можно ли применить auto__ptrt |
|
Как известно многим читателям, язык С++ определяет библиотечный класс под названием auto_ptr. Поскольку auto_ptr автоматически освобождает память, на которую он указывает, когда указатель выходит за пределы области видимости, вы можете решить, что его хорошо было бы использовать при Разработке сборщика мусора, возможно, для формирования основы. К сожалению, это не тот случай. Класс auto_ptr создан для реализации концепции, именуемой в стандарте ISO языка С++ "строгим владением" (strict ownership), в соответствии с которой auto_ptr владеет объектом, на который указывает. Право собственности может быть передано другому указателю auto_ptr, но в любом случае какой-либо auto_ptr будет владеть объектом до тех пор, пока последний не будет удален. Более того, указателю auto_ptr присваивается адрес объекта, только когда объект инициализируется. После этого вы не можете изменить память, на которую указывает auto_ptr, за исключением присваивания одного указателя auto_ptr другому. Из-за характеристики строгого владения, присущей классу auto_ptr, он не может быть полезным при сборе мусора и не применяется в сборщике мусора, приведенном в этой книге.
|