BOOST_ASSERT( Payload.get() != NULL );
BOOST_ASSERT( other.Payload.get() != NULL );
- // FIXME must resize the Payload in order to work
+ // checking for self-assignment (i.e. object1 = object1)
+ if ( &other == this ) {
+ return *this;
+ }
- copy( other.Payload.get(), other.Payload.get() + PayloadSizeInBytes, Payload.get() );
+ size_t new_payload_size_in_bytes = other.PayloadSizeInBytes;
+ uint8_t *new_payload_data = new uint8_t[ new_payload_size_in_bytes ];
+ Payload.reset( new_payload_data );
+ PayloadSizeInBytes = new_payload_size_in_bytes;
+
+ copy( other.Payload.get(), other.Payload.get() + other.PayloadSizeInBytes, Payload.get() );
BOOST_ASSERT( PayloadSizeInBytes == other.PayloadSizeInBytes );