I just built the boost.python 1.36 with Python2.6.1 and tried again, and it still turned out to be 0xcccccccc in debug build.<br>And I made sure this is not caused by &#39;a = B(a)&#39;-like typo.<br><br>Maybe it&#39;s something concerning the project setting or something went wrong with my compiler(?)<br>
Whatever, I think taking a workaround would be a better choice, and maybe I will figure out what really went wrong sometime later..<br><br><div class="gmail_quote">On Thu, Mar 12, 2009 at 8:36 PM, athor <span dir="ltr">&lt;<a href="mailto:thorena@gmail.com">thorena@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im"><br>
<br>
zaexage wrote:<br>
&gt;<br>
&gt; I got a  &#39;class Manager&#39; which contains a std::set of shared_ptr&lt;Entity&gt;;<br>
&gt; and  &#39;class Entity&#39;  has a auto_ptr&lt;StateMachine&gt; as member<br>
&gt; and  &#39;class StateMachine&#39;  needs shared_ptr&lt;Entity&gt; as member variable to<br>
&gt; access some functions outside.<br>
&gt;<br>
&gt; So, in order to break cyclic reference, I make the StateMachine to own a<br>
&gt; &#39;shared_ptr&lt;Entity&gt; const&amp;&#39;, I think it&#39;s kind of reasonable.<br>
&gt;<br>
<br>
</div>I also use VS2008 with Python 2.5 and the boost libraries using the boost<br>
consulting installer so it seems identical (which is strange).<br>
<br>
I&#39;d guess there&#39;s a simple typo somewhere. By using a const&amp; to the<br>
shared_ptr, it may be deallocated once the program (Python/C++) thinks the<br>
original shared_ptr is not in use anymore. For example,<br>
a = A()<br>
a = B(a)<br>
would be such a simple typo. A would immediately be deallocated but the<br>
const ref in B wouldn&#39;t know.<br>
<br>
A few comments:<br>
<br>
* I assume each entity owns a unique StateMachine. Otherwise, the<br>
auto_ptr&lt;StateMachine&gt; may be a problem. I&#39;ve had many strange bugs from<br>
using auto_ptr and thus I only use shared_ptr nowadays.<br>
<br>
* You don&#39;t *need* a const&amp; to break cyclic reference. Passing a shared_ptr<br>
by value works too.<br>
Example:<br>
-------------------------------<br>
// Forward Declare Entity<br>
class Entity;<br>
<br>
// Declare StateMachine<br>
class StateMachine<br>
{<br>
StateMachine(shared_ptr&lt;Entity&gt; e) {...}<br>
};<br>
<br>
// Declare Entitity<br>
class Entity<br>
{<br>
Entity(shared_ptr&lt;StateMachine&gt; s) {...}<br>
};<br>
<font color="#888888"><br>
<br>
--<br>
View this message in context: <a href="http://www.nabble.com/why-does-the-%22shared_ptr%3CX%3E-const-%22-silently-become-0xCCCCCCCC-tp22449314p22475430.html" target="_blank">http://www.nabble.com/why-does-the-%22shared_ptr%3CX%3E-const-%22-silently-become-0xCCCCCCCC-tp22449314p22475430.html</a><br>

</font><div><div></div><div class="h5">Sent from the Python - c++-sig mailing list archive at Nabble.com.<br>
<br>
_______________________________________________<br>
Cplusplus-sig mailing list<br>
<a href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a><br>
<a href="http://mail.python.org/mailman/listinfo/cplusplus-sig" target="_blank">http://mail.python.org/mailman/listinfo/cplusplus-sig</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Time is mana, we must hurry<br>