Clang: Fix move assignment in ClangString

Don't move if you assign to yourself.

Change-Id: I33977fe34cc89849337c17c1ff418ff48d68e708
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
Marco Bubke
2015-08-19 16:22:02 +02:00
parent f2e8abfe67
commit 0b32832812
2 changed files with 15 additions and 12 deletions

View File

@@ -49,20 +49,23 @@ bool ClangString::isNull() const
return cxString.data == nullptr; return cxString.data == nullptr;
} }
ClangString &ClangString::operator=(ClangString &&clangString) ClangString &ClangString::operator=(ClangString &&other)
{ {
cxString = std::move(clangString.cxString); if (this != &other) {
clangString.cxString.data = nullptr; clang_disposeString(cxString);
clangString.cxString.private_flags = 0; cxString = std::move(other.cxString);
other.cxString.data = nullptr;
other.cxString.private_flags = 0;
}
return *this; return *this;
} }
ClangString::ClangString(ClangString &&clangString) ClangString::ClangString(ClangString &&other)
: cxString(std::move(clangString.cxString)) : cxString(std::move(other.cxString))
{ {
clangString.cxString.data = nullptr; other.cxString.data = nullptr;
clangString.cxString.private_flags = 0; other.cxString.private_flags = 0;
} }
ClangString::operator Utf8String() const ClangString::operator Utf8String() const

View File

@@ -43,11 +43,11 @@ public:
ClangString(CXString cxString); ClangString(CXString cxString);
~ClangString(); ~ClangString();
ClangString(const ClangString &clangString) = delete; ClangString(const ClangString &) = delete;
const ClangString &operator=(const ClangString &clangString) = delete; const ClangString &operator=(const ClangString &) = delete;
ClangString(ClangString &&clangString); ClangString(ClangString &&other);
ClangString &operator=(ClangString &&clangString); ClangString &operator=(ClangString &&other);
operator Utf8String() const; operator Utf8String() const;