From c36b713c47c8255f5a41b0c0053997ff11d95859 Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Wed, 25 Sep 2019 18:02:17 +0800 Subject: [PATCH] Disable copy constructor in GenericMember --- include/rapidjson/document.h | 26 +++++++++++++++++++++++++- include/rapidjson/fwd.h | 2 +- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/include/rapidjson/document.h b/include/rapidjson/document.h index 9783fe4..f3f885f 100644 --- a/include/rapidjson/document.h +++ b/include/rapidjson/document.h @@ -63,15 +63,39 @@ class GenericDocument; https://code.google.com/p/rapidjson/issues/detail?id=64 */ template -struct GenericMember { +class GenericMember { +public: GenericValue name; //!< name of member (must be a string) GenericValue value; //!< value of member. +#if RAPIDJSON_HAS_CXX11_RVALUE_REFS + //! Move constructor in C++11 + GenericMember(GenericMember&& rhs) RAPIDJSON_NOEXCEPT = default; + + //! Move assignment in C++11 + GenericMember& operator=(GenericMember&& rhs) RAPIDJSON_NOEXCEPT = default; +#endif + + //! Assignment with move semantics. + /*! \param rhs Source of the assignment. Its name and value will become a null value after assignment. + */ + GenericMember& operator=(GenericMember& rhs) RAPIDJSON_NOEXCEPT { + if (RAPIDJSON_LIKELY(this != &rhs)) { + name = rhs.name; + value = rhs.value; + } + return *this; + } + // swap() for std::sort() and other potential use in STL. friend inline void swap(GenericMember& a, GenericMember& b) RAPIDJSON_NOEXCEPT { a.name.Swap(b.name); a.value.Swap(b.value); } + +private: + //! Copy constructor is not permitted. + GenericMember(const GenericMember& rhs); }; /////////////////////////////////////////////////////////////////////////////// diff --git a/include/rapidjson/fwd.h b/include/rapidjson/fwd.h index e8104e8..b74a2b8 100644 --- a/include/rapidjson/fwd.h +++ b/include/rapidjson/fwd.h @@ -102,7 +102,7 @@ class PrettyWriter; // document.h template -struct GenericMember; +class GenericMember; template class GenericMemberIterator;