From dab725624eafab707a8b0cd94b2f4fc86b57d655 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Sun, 23 Nov 2014 20:42:38 +0900 Subject: [PATCH] Made copy constructors and copy assignment operators private for classes that should be noncopyable. --- erb/cpp03_zone.hpp.erb | 8 +++++++- include/msgpack/detail/cpp03_zone.hpp | 8 +++++++- include/msgpack/detail/cpp11_zone.hpp | 4 ++-- include/msgpack/fbuffer.hpp | 7 ++++++- include/msgpack/pack.hpp | 7 +++++++ include/msgpack/sbuffer.hpp | 7 +++++++ include/msgpack/unpack.hpp | 5 +++++ include/msgpack/vrefbuffer.hpp | 6 ++++++ include/msgpack/zbuffer.hpp | 6 ++++++ 9 files changed, 53 insertions(+), 5 deletions(-) diff --git a/erb/cpp03_zone.hpp.erb b/erb/cpp03_zone.hpp.erb index e5226fe4..c64273ad 100644 --- a/erb/cpp03_zone.hpp.erb +++ b/erb/cpp03_zone.hpp.erb @@ -194,6 +194,9 @@ private: static void object_delete(void* obj); void* allocate_expand(size_t size); +private: + zone(const zone&); + zone& operator=(const zone&); }; inline zone::zone(size_t chunk_size) /* throw() */ :m_chunk_size(chunk_size), m_chunk_list(m_chunk_size) @@ -266,7 +269,10 @@ inline void zone::clear() inline void zone::swap(zone& o) { - std::swap(*this, o); + using std::swap; + swap(m_chunk_size, o.m_chunk_size); + swap(m_chunk_list, o.m_chunk_list); + swap(m_finalizer_array, o.m_finalizer_array); } template diff --git a/include/msgpack/detail/cpp03_zone.hpp b/include/msgpack/detail/cpp03_zone.hpp index 3d55cfa2..adc8e78e 100644 --- a/include/msgpack/detail/cpp03_zone.hpp +++ b/include/msgpack/detail/cpp03_zone.hpp @@ -239,6 +239,9 @@ private: static void object_delete(void* obj); void* allocate_expand(size_t size); +private: + zone(const zone&); + zone& operator=(const zone&); }; inline zone::zone(size_t chunk_size) /* throw() */ :m_chunk_size(chunk_size), m_chunk_list(m_chunk_size) @@ -311,7 +314,10 @@ inline void zone::clear() inline void zone::swap(zone& o) { - std::swap(*this, o); + using std::swap; + swap(m_chunk_size, o.m_chunk_size); + swap(m_chunk_list, o.m_chunk_list); + swap(m_finalizer_array, o.m_finalizer_array); } template diff --git a/include/msgpack/detail/cpp11_zone.hpp b/include/msgpack/detail/cpp11_zone.hpp index 7256aa34..2ce7aae3 100644 --- a/include/msgpack/detail/cpp11_zone.hpp +++ b/include/msgpack/detail/cpp11_zone.hpp @@ -224,11 +224,11 @@ public: zone(zone&&) = default; zone& operator=(zone&&) = default; + zone(const zone&) = delete; + zone& operator=(const zone&) = delete; private: void undo_allocate(size_t size); - zone(const zone&); - zone& operator=(const zone&); template static void object_destruct(void* obj); diff --git a/include/msgpack/fbuffer.hpp b/include/msgpack/fbuffer.hpp index 39bb4089..f95b71ff 100644 --- a/include/msgpack/fbuffer.hpp +++ b/include/msgpack/fbuffer.hpp @@ -44,9 +44,14 @@ public: return m_file; } +#if defined(MSGPACK_USE_CPP03) private: fbuffer(const fbuffer&); - fbuffer& operator= (const fbuffer&); + fbuffer& operator=(const fbuffer&); +#else // defined(MSGPACK_USE_CPP03) + fbuffer(const fbuffer&) = delete; + fbuffer& operator=(const fbuffer&) = delete; +#endif // defined(MSGPACK_USE_CPP03) private: FILE* m_file; diff --git a/include/msgpack/pack.hpp b/include/msgpack/pack.hpp index ed5b0a61..fec1b0ad 100644 --- a/include/msgpack/pack.hpp +++ b/include/msgpack/pack.hpp @@ -115,7 +115,14 @@ private: private: Stream& m_stream; +#if defined(MSGPACK_USE_CPP03) private: + packer(const packer&); + packer& operator=(const packer&); +#else // defined(MSGPACK_USE_CPP03) + packer(const packer&) = delete; + packer& operator=(const packer&) = delete; +#endif // defined(MSGPACK_USE_CPP03) packer(); }; diff --git a/include/msgpack/sbuffer.hpp b/include/msgpack/sbuffer.hpp index 7b968ae0..2803013b 100644 --- a/include/msgpack/sbuffer.hpp +++ b/include/msgpack/sbuffer.hpp @@ -112,8 +112,15 @@ private: m_alloc = nsize; } +#if defined(MSGPACK_USE_CPP03) private: sbuffer(const sbuffer&); + sbuffer& operator=(const sbuffer&); +#else // defined(MSGPACK_USE_CPP03) + sbuffer(const sbuffer&) = delete; + sbuffer& operator=(const sbuffer&) = delete; +#endif // defined(MSGPACK_USE_CPP03) + private: size_t m_size; char* m_data; diff --git a/include/msgpack/unpack.hpp b/include/msgpack/unpack.hpp index b64ad53b..d539179e 100644 --- a/include/msgpack/unpack.hpp +++ b/include/msgpack/unpack.hpp @@ -971,9 +971,14 @@ private: std::size_t m_initial_buffer_size; detail::context m_ctx; +#if defined(MSGPACK_USE_CPP03) private: unpacker(const unpacker&); unpacker& operator=(const unpacker&); +#else // defined(MSGPACK_USE_CPP03) + unpacker(const unpacker&) = delete; + unpacker& operator=(const unpacker&) = delete; +#endif // defined(MSGPACK_USE_CPP03) }; #if !defined(MSGPACK_USE_CPP03) diff --git a/include/msgpack/vrefbuffer.hpp b/include/msgpack/vrefbuffer.hpp index 3e4e271b..d36463ed 100644 --- a/include/msgpack/vrefbuffer.hpp +++ b/include/msgpack/vrefbuffer.hpp @@ -268,8 +268,14 @@ public: m_tail = m_array; } +#if defined(MSGPACK_USE_CPP03) private: vrefbuffer(const vrefbuffer&); + vrefbuffer& operator=(const vrefbuffer&); +#else // defined(MSGPACK_USE_CPP03) + vrefbuffer(const vrefbuffer&) = delete; + vrefbuffer& operator=(const vrefbuffer&) = delete; +#endif // defined(MSGPACK_USE_CPP03) private: iovec* m_tail; diff --git a/include/msgpack/zbuffer.hpp b/include/msgpack/zbuffer.hpp index 43a9d77b..3e1d75d0 100644 --- a/include/msgpack/zbuffer.hpp +++ b/include/msgpack/zbuffer.hpp @@ -149,8 +149,14 @@ private: return true; } +#if defined(MSGPACK_USE_CPP03) private: zbuffer(const zbuffer&); + zbuffer& operator=(const zbuffer&); +#else // defined(MSGPACK_USE_CPP03) + zbuffer(const zbuffer&) = delete; + zbuffer& operator=(const zbuffer&) = delete; +#endif // defined(MSGPACK_USE_CPP03) private: z_stream m_stream;