#184·MyTinySTL

关于uninitialized.h的异常处理问题

Author: YuukaBkklCreated Oct 13, 2025Updated Oct 18, 2025

template <class InputIter, class ForwardIter> ForwardIter unchecked_uninit_copy(InputIter first, InputIter last, ForwardIter result, std::false_type) {

auto cur = result; try { for (; first != last; ++first, ++cur) { mystl::construct(&*cur, *first); } } catch (...) { for (; result != cur; --cur) mystl::destroy(&*cur); } return cur; }

个人感觉在异常处理的for循环中,--cur应该放在函数体内,不然销毁的位置不对。 参考了STL中的实现,是++result到cur: __destroy(_ForwardIterator __first, _ForwardIterator __last) { for (; __first != __last; ++__first) std::_Destroy(std::__addressof(*__first)); } 初学者刚看到这里,不对还请指正