summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
Diffstat (limited to 'base')
-rw-r--r--base/memory/scoped_vector.h8
-rw-r--r--base/memory/scoped_vector_unittest.cc19
2 files changed, 21 insertions, 6 deletions
diff --git a/base/memory/scoped_vector.h b/base/memory/scoped_vector.h
index f8afcdd..5470097 100644
--- a/base/memory/scoped_vector.h
+++ b/base/memory/scoped_vector.h
@@ -33,7 +33,7 @@ class ScopedVector {
const_reverse_iterator;
ScopedVector() {}
- ~ScopedVector() { reset(); }
+ ~ScopedVector() { clear(); }
ScopedVector(RValue& other) { swap(other); }
ScopedVector& operator=(RValue& rhs) {
@@ -73,7 +73,6 @@ class ScopedVector {
v.clear();
}
- void reset() { STLDeleteElements(&v); }
void reserve(size_t capacity) { v.reserve(capacity); }
void resize(size_t new_size) { v.resize(new_size); }
@@ -82,7 +81,10 @@ class ScopedVector {
v.assign(begin, end);
}
- void clear() { v.clear(); }
+ void clear() { STLDeleteElements(&v); }
+
+ // Like |clear()|, but doesn't delete any elements.
+ void weak_clear() { v.clear(); }
// Lets the ScopedVector take ownership of |x|.
iterator insert(iterator position, T* x) {
diff --git a/base/memory/scoped_vector_unittest.cc b/base/memory/scoped_vector_unittest.cc
index f6c7167..03774c5 100644
--- a/base/memory/scoped_vector_unittest.cc
+++ b/base/memory/scoped_vector_unittest.cc
@@ -107,14 +107,27 @@ TEST(ScopedVectorTest, LifeCycleWatcher) {
EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state());
}
-TEST(ScopedVectorTest, Reset) {
+TEST(ScopedVectorTest, Clear) {
LifeCycleWatcher watcher;
EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
ScopedVector<LifeCycleObject> scoped_vector;
scoped_vector.push_back(watcher.NewLifeCycleObject());
EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
- scoped_vector.reset();
+ scoped_vector.clear();
EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state());
+ EXPECT_EQ(static_cast<size_t>(0), scoped_vector.size());
+}
+
+TEST(ScopedVectorTest, WeakClear) {
+ LifeCycleWatcher watcher;
+ EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
+ ScopedVector<LifeCycleObject> scoped_vector;
+ scoped_ptr<LifeCycleObject> object(watcher.NewLifeCycleObject());
+ scoped_vector.push_back(object.get());
+ EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
+ scoped_vector.weak_clear();
+ EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
+ EXPECT_EQ(static_cast<size_t>(0), scoped_vector.size());
}
TEST(ScopedVectorTest, Scope) {
@@ -196,7 +209,7 @@ TEST(ScopedVectorTest, Passed) {
EXPECT_EQ(0, deletes);
ScopedVector<DeleteCounter> result = callback.Run();
EXPECT_EQ(0, deletes);
- result.reset();
+ result.clear();
EXPECT_EQ(1, deletes);
};