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

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

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

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

最佳答案

我会给你一个很好的用法的简短例子。考虑一下:

auto_ptr<SomeResource> some_function() {
    auto_ptr<SomeResource> my_ptr = get_the_resource();

    function_that_throws_an_exception();

    return my_ptr;
}

引发异常的函数通常会导致您的指针丢失,并且指向的对象不会被删除。使用 auto_ptr 这不会发生,因为当它离开它创建的框架时它会被销毁,如果它没有被分配(例如使用 return )。

关于c++ - std::auto_ptr<T> 用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7109684/

10-11 06:29