std :: auto_ptr <T>用法

Joh*_*0te 3 c++ stl auto-ptr

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

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

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

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

Con*_*ius 7

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

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

    function_that_throws_an_exception();

    return my_ptr;
}
Run Code Online (Sandbox Code Playgroud)

引发异常的函数通常会导致指针丢失,并且不会删除指向的对象.由于auto_ptr这种情况不会发生,因为它在离开框架时会被破坏,如果它没有被分配(例如return),则它被创建.