std :: auto_ptr <t>用法</t>

时间:2011-08-18 15:06:36

标签: c++ stl auto-ptr

我在体面的教科书中读到了关于auto_ptr类的合理数量。虽然我理解它是什么,以及它如何解决在构造函数等地方获取异常的问题,但我很难搞清楚某人何时会实际使用它。

auto_ptr只能保存一种类型(不支持数组new []初始化)。当您将其传递给函数或尝试复制它时,它会更改所有权(它不是计数智能指针的引用)。

这个类的实际使用场景有哪些限制?似乎大多数使用它的教科书示例都达到了,因为在大多数情况下甚至没有理由在堆栈变量上使用指针......

无论如何,我会停止我的咆哮 - 但如果你能提供一个简短的例子/描述或链接到一个良好的使用场景,我将不胜感激。我只是想知道在实践中我应该在哪里使用它以防遇到这种情况 - 我喜欢练习我学到的东西所以我记得它。

2 个答案:

答案 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_ptrunique_ptrscoped_ptr in boost)。