@@ -129,6 +129,9 @@ class private_adaptive_pool_base
129129 };
130130
131131 private:
132+
133+ BOOST_COPYABLE_AND_MOVABLE_ALT (private_adaptive_pool_base)
134+
132135 // !Not assignable from related private_adaptive_pool_base
133136 template<unsigned int Version2, class T2, class MemoryAlgorithm2, std::size_t N2, std::size_t F2, unsigned char OP2>
134137 private_adaptive_pool_base& operator=
@@ -149,7 +152,14 @@ class private_adaptive_pool_base
149152 : m_node_pool(other.get_segment_manager())
150153 {}
151154
152- // !Copy constructor from related private_adaptive_pool_base. Never throws.
155+ // !Copy constructor from other private_adaptive_pool_base. Never throws
156+ private_adaptive_pool_base (BOOST_RV_REF(private_adaptive_pool_base) other)
157+ : m_node_pool(other.get_segment_manager())
158+ {
159+ m_node_pool.swap (BOOST_MOVE_TO_LV (other).m_node_pool );
160+ }
161+
162+ // !Move constructor from related private_adaptive_pool_base. Never throws.
153163 template <class T2 >
154164 private_adaptive_pool_base
155165 (const private_adaptive_pool_base
@@ -208,6 +218,7 @@ class private_adaptive_pool_v1
208218 , OverheadPercent
209219 >
210220{
221+ BOOST_COPYABLE_AND_MOVABLE_ALT (private_adaptive_pool_v1)
211222 public:
212223 typedef ipcdetail::private_adaptive_pool_base
213224 < 1 , T, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> base_t ;
@@ -227,6 +238,14 @@ class private_adaptive_pool_v1
227238 (const private_adaptive_pool_v1<T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> &other)
228239 : base_t (other)
229240 {}
241+
242+ private_adaptive_pool_v1 (const private_adaptive_pool_v1 &other)
243+ : base_t (other)
244+ {}
245+
246+ private_adaptive_pool_v1 (BOOST_RV_REF(private_adaptive_pool_v1) other)
247+ : base_t (BOOST_MOVE_BASE(base_t , other))
248+ {}
230249};
231250
232251} // namespace ipcdetail {
@@ -268,6 +287,8 @@ class private_adaptive_pool
268287 #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
269288 typedef ipcdetail::private_adaptive_pool_base
270289 < 2 , T, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> base_t ;
290+
291+ BOOST_COPYABLE_AND_MOVABLE_ALT (private_adaptive_pool)
271292 public:
272293 typedef boost::interprocess::version_type<private_adaptive_pool, 2> version;
273294
@@ -288,6 +309,14 @@ class private_adaptive_pool
288309 : base_t (other)
289310 {}
290311
312+ private_adaptive_pool (const private_adaptive_pool &other)
313+ : base_t(other)
314+ {}
315+
316+ private_adaptive_pool (BOOST_RV_REF(private_adaptive_pool) other)
317+ : base_t(BOOST_MOVE_BASE(base_t , other))
318+ {}
319+
291320 #else
292321 public:
293322 typedef implementation_defined::segment_manager segment_manager;
@@ -332,6 +361,10 @@ class private_adaptive_pool
332361 // !count of the associated node pool. Never throws
333362 private_adaptive_pool (const private_adaptive_pool &other);
334363
364+ // !Move constructor from other. Increments the reference
365+ // !count of the associated node pool and captures the cache. Never throws
366+ private_adaptive_pool (private_adaptive_pool &&other);
367+
335368 // !Copy constructor from related private_adaptive_pool. If not present, constructs
336369 // !a node pool. Increments the reference count of the associated node pool.
337370 // !Can throw boost::interprocess::bad_alloc
0 commit comments