3

我在体面的教科书中阅读了相当多的关于 auto_ptr 类的内容。虽然我了解它是什么,以及它如何帮助您解决在构造函数等地方获取异常的问题,但我无法弄清楚何时有人会真正使用它。

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

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

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

4

2 回答 2

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)。

于 2011-08-18T15:13:23.063 回答
4

auto_ptr在现已最终确定的 C++11 标准中已弃用。一些替代品已经可以通过 TR1 或Boost库获得。例子是shared_ptrunique_ptrscoped_ptr在提升中)。

于 2011-08-18T15:10:50.103 回答