有没有理由使用auto_ptr?

izh*_*hak 15 c++ stl smart-pointers auto-ptr

从他的STL书中读到Jossutis对auto_ptr的解释之后,我得到了一个强烈的印象,即我会尝试使用它的任何任务100%失败,因为很多auto_ptr的陷阱之一.

我的问题是:有没有任何真正的生活任务,其中auto_ptr真的很有用,并且适合那里吗?

ice*_*ime 14

显然,auto_ptr失败了unique_ptr.

现在,在"严格的C++ 03无提升"世界中,我auto_ptr经常使用,最值得注意的是:

  • 对于返回给定类型的动态分配实例的"工厂成员函数":我喜欢std::auto_ptr在返回类型中使用explicits 必须删除该对象的事实
  • 在尝试在之后尝试将对象插入容器之前分配对象的函数中:例如,release()仅在std::map<>::insert返回插入成功时
  • 在一个从消息队列中弹出元素的线程程序中,我喜欢将pop'ed元素存储在a中const std::auto_ptr,以明确无论如何消息都将被销毁.

  • @etarion:它仍然是一个维护开销.哪个版本的提升?谁负责监控更新?您是否需要查看代码,因为它不是实现的一部分.在某些环境中,使用不属于实现的代码总是意味着很大的管理开销. (5认同)
  • +1,因为有许多商店有*正当理由*不使用Boost.我在这样的商店工作.有些正当理由,请参阅@Charles的评论. (5认同)

Ara*_*raK 5

我会说它可以使用,但它不是最好的选择.

首先,这是一年或更短的时间,auto_ptr并正式弃用.其次,有一个更好的选择:unique_ptr.斯特劳斯博士曾经说过有关unique_ptr:

"应该是什么auto_ptr"(但我们无法在C++ 98中编写)

所以,除非你没有选择,否则auto_ptr不是一个好的选择.主要是因为现在大多数C++编译器都实现move semantics并提供unique_ptr.