Skip to content

Commit c36b713

Browse files
committed
Disable copy constructor in GenericMember
1 parent 6006d6b commit c36b713

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

include/rapidjson/document.h

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,39 @@ class GenericDocument;
6363
https://code.google.com/p/rapidjson/issues/detail?id=64
6464
*/
6565
template <typename Encoding, typename Allocator>
66-
struct GenericMember {
66+
class GenericMember {
67+
public:
6768
GenericValue<Encoding, Allocator> name; //!< name of member (must be a string)
6869
GenericValue<Encoding, Allocator> value; //!< value of member.
6970

71+
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
72+
//! Move constructor in C++11
73+
GenericMember(GenericMember&& rhs) RAPIDJSON_NOEXCEPT = default;
74+
75+
//! Move assignment in C++11
76+
GenericMember& operator=(GenericMember&& rhs) RAPIDJSON_NOEXCEPT = default;
77+
#endif
78+
79+
//! Assignment with move semantics.
80+
/*! \param rhs Source of the assignment. Its name and value will become a null value after assignment.
81+
*/
82+
GenericMember& operator=(GenericMember& rhs) RAPIDJSON_NOEXCEPT {
83+
if (RAPIDJSON_LIKELY(this != &rhs)) {
84+
name = rhs.name;
85+
value = rhs.value;
86+
}
87+
return *this;
88+
}
89+
7090
// swap() for std::sort() and other potential use in STL.
7191
friend inline void swap(GenericMember& a, GenericMember& b) RAPIDJSON_NOEXCEPT {
7292
a.name.Swap(b.name);
7393
a.value.Swap(b.value);
7494
}
95+
96+
private:
97+
//! Copy constructor is not permitted.
98+
GenericMember(const GenericMember& rhs);
7599
};
76100

77101
///////////////////////////////////////////////////////////////////////////////

include/rapidjson/fwd.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class PrettyWriter;
102102
// document.h
103103

104104
template <typename Encoding, typename Allocator>
105-
struct GenericMember;
105+
class GenericMember;
106106

107107
template <bool Const, typename Encoding, typename Allocator>
108108
class GenericMemberIterator;

0 commit comments

Comments
 (0)