Would vector<T, std::allocator<T>>::clear() be O(1) if T is trivially destructible?
gcc's implementation in bits/stl_vector.h calls std::_Destroy(bits/stl_construct.h). This implementation which optimizes for the case of T being trivially destructible through tag-dispatching on std::is_trivially_destructible<T>.
Looking through llvm's(3.5.0) implementation, vector::clear calls std::allocator<T>::destroy on every element, which in turn invokes the destructor.
_LIBCPP_INLINE_VISIBILITY void destroy(pointer __p) {__p->~_Tp();}
Would this end up getting optimized out making vector::clear() O(1) in libc++ as well?
Aucun commentaire:
Enregistrer un commentaire