The smallvector dtor should destroy the elements.

Implement pop_back.
Chage some code to use 'iterator' instead of T*.  This unbreaks operators=.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29380 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2006-07-28 05:03:42 +00:00
parent e47863e212
commit d91e5f911f

View File

@ -66,6 +66,10 @@ public:
std::uninitialized_copy(RHS.begin(), RHS.end(), Begin);
}
~SmallVector() {
// Destroy the constructed elements in the vector.
for (iterator I = Begin, E = End; I != E; ++I)
I->~T();
// If this wasn't grown from the inline copy, deallocate the old space.
if ((void*)Begin != (void*)InlineElts)
delete[] (char*)Begin;
@ -115,6 +119,12 @@ public:
goto Retry;
}
void pop_back() {
assert(!empty() && "SmallVector is empty!");
--End;
End->~T();
}
/// append - Add the specified range to the end of the SmallVector.
///
template<typename in_iter>
@ -154,7 +164,7 @@ public:
// This allows us to avoid copying them during the grow.
if (Capacity-Begin < RHSSize) {
// Destroy current elements.
for (T *I = Begin, E = End; I != E; ++I)
for (iterator I = Begin, E = End; I != E; ++I)
I->~T();
End = Begin;
CurSize = 0;
@ -192,7 +202,7 @@ private:
std::uninitialized_copy(Begin, End, NewElts);
// Destroy the original elements.
for (T *I = Begin, *E = End; I != E; ++I)
for (iterator I = Begin, E = End; I != E; ++I)
I->~T();
// If this wasn't grown from the inline copy, deallocate the old space.