c++ - std::auto_ptr<T> 用法

标签 c++ stl auto-ptr

我已经阅读了大量关于 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/

相关文章:

c++ - 带有 MySQL 的组合框

c++ - 使用文件路径访问 Armadillo 库 C++ Linux OS

c++ - 如何返回 lambda 对象?

c++ - 列表迭代器不可递增 - 运行时错误

c++ - 指针初始化的STL vector

c++ - 使用 auto_ptr<std::ofstream> 对象

c++ - 多线程 mex 代码比单线程慢

c++ - 如何在 C++ 中对三元组进行排序?

c++ - 在这种情况下如何使用 auto_ptr

c++ - auto_ptr 未按预期工作 - 编译错误