我在体面的教科书中读到了关于auto_ptr类的合理数量。虽然我理解它是什么,以及它如何解决在构造函数等地方获取异常的问题,但我很难搞清楚某人何时会实际使用它。
auto_ptr只能保存一种类型(不支持数组new []初始化)。当您将其传递给函数或尝试复制它时,它会更改所有权(它不是计数智能指针的引用)。
这个类的实际使用场景有哪些限制?似乎大多数使用它的教科书示例都达到了,因为在大多数情况下甚至没有理由在堆栈变量上使用指针......
无论如何,我会停止我的咆哮 - 但如果你能提供一个简短的例子/描述或链接到一个良好的使用场景,我将不胜感激。我只是想知道在实践中我应该在哪里使用它以防遇到这种情况 - 我喜欢练习我学到的东西所以我记得它。
答案 0 :(得分:7)
我会给你一个很好的用法的简短例子。考虑一下:
auto_ptr<SomeResource> some_function() {
auto_ptr<SomeResource> my_ptr = get_the_resource();
function_that_throws_an_exception();
return my_ptr;
}
引发异常的函数通常会导致指针丢失,并且不会删除指向的对象。使用auto_ptr
这不可能发生,因为它在离开创建的帧时被销毁(如果尚未分配)(例如使用return
)。
答案 1 :(得分:4)
auto_ptr
已在现已最终确定的C ++ 11标准中弃用。一些替换已经可以通过TR1或Boost库获得。示例包括shared_ptr
和unique_ptr
(scoped_ptr
in boost)。