зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1185589 - Properly handle self-assignment in nsTArray::operator=. r=mccr8
This commit is contained in:
Родитель
4bd37db746
Коммит
4db7ee5707
|
@ -882,7 +882,9 @@ public:
|
|||
// @param aOther The array object to copy.
|
||||
self_type& operator=(const self_type& aOther)
|
||||
{
|
||||
ReplaceElementsAt(0, Length(), aOther.Elements(), aOther.Length());
|
||||
if (this != &aOther) {
|
||||
ReplaceElementsAt(0, Length(), aOther.Elements(), aOther.Length());
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
@ -891,8 +893,10 @@ public:
|
|||
// @param other The array object to move from.
|
||||
self_type& operator=(self_type&& aOther)
|
||||
{
|
||||
Clear();
|
||||
SwapElements(aOther);
|
||||
if (this != &aOther) {
|
||||
Clear();
|
||||
SwapElements(aOther);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ const nsTArray<int>& FakeHugeArray()
|
|||
}
|
||||
#endif
|
||||
|
||||
TEST(TArray, assign)
|
||||
TEST(TArray, Assign)
|
||||
{
|
||||
nsTArray<int> array;
|
||||
array.Assign(DummyArray());
|
||||
|
@ -54,4 +54,15 @@ TEST(TArray, assign)
|
|||
ASSERT_EQ(DummyArray(), array2);
|
||||
}
|
||||
|
||||
TEST(TArray, AssignmentOperatorSelfAssignment)
|
||||
{
|
||||
nsTArray<int> array;
|
||||
array = DummyArray();
|
||||
|
||||
array = array;
|
||||
ASSERT_EQ(DummyArray(), array);
|
||||
array = Move(array);
|
||||
ASSERT_EQ(DummyArray(), array);
|
||||
}
|
||||
|
||||
} // namespace TestTArray
|
||||
|
|
Загрузка…
Ссылка в новой задаче