Switch to copy-and-swap idiom for operator=.

This allows the compiler to elide a copy when rhs is a temporary.
This commit is contained in:
Billy Donahue
2014-09-08 08:00:39 -04:00
committed by Christopher Dunn
parent 236db83742
commit 45cd9490cd
4 changed files with 12 additions and 16 deletions

View File

@@ -280,10 +280,9 @@ ValueInternalArray::ValueInternalArray( const ValueInternalArray &other )
ValueInternalArray &
ValueInternalArray::operator =( const ValueInternalArray &other )
ValueInternalArray::operator=(ValueInternalArray other)
{
ValueInternalArray temp( other );
swap( temp );
swap(other);
return *this;
}

View File

@@ -196,10 +196,9 @@ ValueInternalMap::ValueInternalMap( const ValueInternalMap &other )
ValueInternalMap &
ValueInternalMap::operator =( const ValueInternalMap &other )
ValueInternalMap::operator=(ValueInternalMap other)
{
ValueInternalMap dummy( other );
swap( dummy );
swap(other);
return *this;
}

View File

@@ -190,9 +190,8 @@ void Value::CZString::swap(CZString &other) {
std::swap(index_, other.index_);
}
Value::CZString &Value::CZString::operator=(const CZString &other) {
CZString temp(other);
swap(temp);
Value::CZString &Value::CZString::operator=(CZString other) {
swap(other);
return *this;
}
@@ -481,9 +480,8 @@ Value::~Value() {
delete[] comments_;
}
Value &Value::operator=(const Value &other) {
Value temp(other);
swap(temp);
Value &Value::operator=(Value other) {
swap(other);
return *this;
}