在C++ 17中destroy(),destroy_n()运行一系列对象的析构函数.
然而,根据cppreference,这是以前进的方式完成的,即,
template< class ForwardIt >
void destroy( ForwardIt first, ForwardIt last )
{
for (; first != last; ++first)
std::destroy_at(std::addressof(*first));
}
Run Code Online (Sandbox Code Playgroud)
但是阵列的破坏与标准要求的构造顺序相反.
那么destroy()和的用例是destroy_n()什么?
是否有理由不与正常的阵列破坏保持一致,或者这是否是cppreference中的错误?
的destroy()/ destroy_n()是一致的-但与标准算法.它会给添加一个向后工作的算法带来很多不必要的混淆.除此之外,您可以随时:
destroy(std::rbegin(array), std::rend(array));
Run Code Online (Sandbox Code Playgroud)
在保持其余算法的样式和类型要求的同时,它完全符合您的要求.
关于标准还有一件事.它只表明C风格的数组以这种方式工作.什么都没有vector,map或任何其他stl容器.由于destroy函数可以采用任何C++范围,因此它的行为与典型的C++代码一样合理,而不是很久以前继承的语法的一部分.