Skip to content

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

@YuukaBkkl

Description

@YuukaBkkl

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));
}
初学者刚看到这里,不对还请指正

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions