Hi,<div><br></div><div>I was using the Cpp ZMQ interface lately and while writing a bunch of unit tests I came accross curious behaviour in the move constructor and assignment operator of zmq::message_t.</div><div><br></div>
<div>The following tests fail (zmq 3.2.2, latest zmq.hpp from github, MSVC10)</div><div><br></div><div><div><br></div><div>      zmq::message_t m0(10);</div><div>      void *adr = m0.data();</div><div><br></div><div>      zmq::message_t m1;</div>
<div>      m1 = std::move(m0);</div><div><br></div><div>      BOOST_REQUIRE_EQUAL(adr, m1.data());</div></div><div><br></div><div>It might be a semantic error on my side, but I would have thought that an efficient implementation would happly reuse the buffer allocated by m0. Instead i get a different buffer address. Similarily the move constructor seems to re(a)locate the buffer</div>
<div><br></div><div><div>      zmq::message_t m0(10);</div><div>      void *adr = m0.data();</div><div><br></div><div>      zmq::message_t m1(std::move(m0));</div><div><br></div><div>      BOOST_REQUIRE_EQUAL(adr, m1.data())</div>
</div><div><br></div><div>Is this behaviour intended? </div><div><br></div><div>Btw. in zmq.hpp std::swap is used in the move assignment operator. This seems to me as both buffers survive (at least temporarily) in a scenario as described above ( zmq::message_t m1(std::move(m0))). I guess that has something todo with the fact that closing the message is always done in the destructor.</div>
<div><br></div><div>Best,</div><div>Christoph</div>