编辑:我应该提到,我正在查看Boost 的文档ptr_sequence_adapter
,它声称他们的适配器template< class U > void push_back( ::std::auto_ptr<U> x );
等同于做vec.push_back(autoPtr.release());
,并且还提供了强大的异常保证。然后我意识到我混淆了他们对实施效果的描述与实施的实际情况,所以这个问题是半荒谬的。我只是把它留在这里留给后代。
对我来说,似乎调用std::auto_ptr<t>
会成功,然后调用std::vector<t*>::push_back
可能会引发异常,并且指针会被泄露。
看来您必须这样做:
vec.push_back(0); //Attempts to allocate space in vector, could throw bad_alloc
vec.back() = autoPtr.release(); //Provides nothrow