| Index: base/stl_util.h
|
| diff --git a/base/stl_util.h b/base/stl_util.h
|
| index 4159d8524a3f7e24d7d9101daae9d2d27b1d99a3..3f7555dde5450052dfc9c930c3c444fe7a9a77f8 100644
|
| --- a/base/stl_util.h
|
| +++ b/base/stl_util.h
|
| @@ -29,24 +29,6 @@ void STLClearObject(T* obj) {
|
| obj->reserve(0);
|
| }
|
|
|
| -// For a range within a container of pointers, calls delete (non-array version)
|
| -// on these pointers.
|
| -// NOTE: for these three functions, we could just implement a DeleteObject
|
| -// functor and then call for_each() on the range and functor, but this
|
| -// requires us to pull in all of algorithm.h, which seems expensive.
|
| -// For hash_[multi]set, it is important that this deletes behind the iterator
|
| -// because the hash_set may call the hash function on the iterator when it is
|
| -// advanced, which could result in the hash function trying to deference a
|
| -// stale pointer.
|
| -template <class ForwardIterator>
|
| -void STLDeleteContainerPointers(ForwardIterator begin, ForwardIterator end) {
|
| - while (begin != end) {
|
| - ForwardIterator temp = begin;
|
| - ++begin;
|
| - delete *temp;
|
| - }
|
| -}
|
| -
|
| // Counts the number of instances of val in a container.
|
| template <typename Container, typename T>
|
| typename std::iterator_traits<
|
| @@ -85,7 +67,13 @@ template <class T>
|
| void STLDeleteElements(T* container) {
|
| if (!container)
|
| return;
|
| - STLDeleteContainerPointers(container->begin(), container->end());
|
| +
|
| + for (auto it = container->begin(); it != container->end();) {
|
| + auto temp = it;
|
| + ++it;
|
| + delete *temp;
|
| + }
|
| +
|
| container->clear();
|
| }
|
|
|
| @@ -97,8 +85,7 @@ void STLDeleteValues(T* container) {
|
| if (!container)
|
| return;
|
|
|
| - auto it = container->begin();
|
| - while (it != container->end()) {
|
| + for (auto it = container->begin(); it != container->end();) {
|
| auto temp = it;
|
| ++it;
|
| delete temp->second;
|
|
|