<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>std::auto_ptr and std::list</title>
		<link>http://www.allegro.cc/forums/view/601189</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 11 Aug 2009 04:06:46 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I want to store some object in an list. But poymorphism is needed. So I have to work with references. To avoid any memory leaks. I tried to use std::auto_ptr.</p><p>My container is:</p><div class="source-code snippet"><div class="inner"><pre>
<span class="k1">class</span> Layer <span class="k2">:</span> <span class="k1">public</span> GameObj, <span class="k1">public</span> std::list<span class="k3">&lt;</span> std::auto_ptr<span class="k3">&lt;</span>GameObj&gt; <span class="k3">&gt;</span>
<span class="k2">{</span>
  public:

  <span class="k1">virtual</span> <span class="k1">void</span> draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
  <span class="k1">virtual</span> <span class="k1">void</span> update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>      
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

And this is where I try to create my str::auto_ptr and add it to the list:</p><div class="source-code snippet"><div class="inner"><pre>
OperationRaubvogel::OperationRaubvogel<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span> Game<span class="k2">(</span><span class="n">320</span>, <span class="n">240</span>, <span class="n">0</span><span class="k2">)</span>
<span class="k2">{</span>
  useKeyboard<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
  useTheme<span class="k2">(</span><span class="s">"sprites.png"</span><span class="k2">)</span><span class="k2">;</span>
  
  std::auto_ptr<span class="k3">&lt;</span>GameObj&gt; ship<span class="k2">(</span> <span class="k1">new</span> Ship <span class="k2">)</span><span class="k2">;</span>
  push_back<span class="k2">(</span>ship<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

I get a long list of errors, pointing inside the stdlib. I&#39;m new to the topic and have no idea how to go on.</p><p>Some additional infos:</p><p>OperationRaubvogel is a Game which is a Layer.<br />Ship is a GameObj.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Martin Kalbfuß)</author>
		<pubDate>Sun, 09 Aug 2009 23:52:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Never put auto_ptrs in a container. Never, ever, ever. Why? Because auto_ptr does not have proper copy semantics and will be freed almost immediately.</p><p>Use boost::shared_ptr instead.</p><p>EDIT: In fact, don&#39;t use auto_ptr for anything. It&#39;s too easy to screw up. Use boost::shared_ptr or boost::scoped_ptr, depending on what you&#39;re doing.</p><p>EDIT2: Also, don&#39;t inherit from std::list.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (X-G)</author>
		<pubDate>Sun, 09 Aug 2009 23:53:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My head hurts <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /> . Isn&#39;t there a way without an additional lib?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Martin Kalbfuß)</author>
		<pubDate>Sun, 09 Aug 2009 23:57:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No. Besides, if you&#39;re serious about C++, you should get boost anyway. shared_ptr is header-only, so you don&#39;t need to worry about compiling anything. Just include and go.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (X-G)</author>
		<pubDate>Mon, 10 Aug 2009 00:02:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/601189/824721#target">Martin Kalbfuß</a> said:</div><div class="quote"><p>
Isn&#39;t there a way without an additional lib? 
</p></div></div><p>

If you have recent compiler, then you might also have std::tr1::shared_ptr. With GCC 4.4 it is already std::shared_ptr in &lt;memory&gt;.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anonymous)</author>
		<pubDate>Mon, 10 Aug 2009 00:17:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have 4.3 <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />. Is this standard C++?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Martin Kalbfuß)</author>
		<pubDate>Mon, 10 Aug 2009 00:42:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>shared_ptr is an addition to the standard library with C++0x.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anonymous)</author>
		<pubDate>Mon, 10 Aug 2009 00:50:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/601189/824732#target">anonymous</a> said:</div><div class="quote"><p>shared_ptr is an addition to the standard library with C++0x.</p></div></div><p>I think you mean C++1x.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Mon, 10 Aug 2009 00:58:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So it&#39;s going to be standard. Boost I&#39;m comming.</p><p><img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /> Do you think it takes so long?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Martin Kalbfuß)</author>
		<pubDate>Mon, 10 Aug 2009 00:59:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/601189/824735#target">Thomas Fjellstrom</a> said:</div><div class="quote"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/601189/824732#target">anonymous</a> said:</div><div class="quote"><p>shared_ptr is an addition to the standard library with C++0x.</p></div></div><p>
I think you mean C++1x.</p></div></div><p>
There&#39;s still plenty of time for a finalization of C++0x: C++0a, C++0b, C++0c... <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Mon, 10 Aug 2009 01:05:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/601189/824736#target">Martin Kalbfuß</a> said:</div><div class="quote"><p>Do you think it takes so long?</p></div></div><p>It&#39;s been postponed till at least 2010.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Mon, 10 Aug 2009 01:06:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I still don&#39;t understand why it&#39;s bad to inherit from standard containers directly.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Martin Kalbfuß)</author>
		<pubDate>Mon, 10 Aug 2009 01:22:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Is-a vs. has-a. Your Layer is not a list of objects, it HAS a list of objects.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (X-G)</author>
		<pubDate>Mon, 10 Aug 2009 01:24:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So it is a design question? No technical problems?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Martin Kalbfuß)</author>
		<pubDate>Mon, 10 Aug 2009 01:27:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Don&#39;t underestimate design issues. Two things come immediately to mind:</p><ul><li><p>You&#39;re also giving outside objects internal access to every object in the list -- they can delete and move around objects outside of the Layer&#39;s control, swap and erase, etc. all without proper or indeed any encapsulation.
</p></li><li><p>As your class grows in functionality, you might want to add more stuff to the Layer -- another list of objects, perhaps -- and now you&#39;re in a really bloody weird spot, aren&#39;t you, with a list-in-a-list. Xzibit would be proud, but I won&#39;t.</p></li></ul><p>EDIT: There is another very good reason you should consider in this particular case: standard containers do not have virtual destructors, but that class has virtual methods and so it must -- meaning you&#39;re opening yourself up for really unpredictable (undefined, actually) memory errors.</p><p>Here, you are even further complicating the issue by doing virtual multiple inheritance, which is honestly a mess that I only barely understand properly.</p><p>In the end, you have no reason to do this and it&#39;s both technically and design-wise a tremendously bad idea. <b>Don&#39;t do it.</b> I&#39;d hate to phrase it this way, but if it helps to convince you, then: please, take it from someone who actually works in the industry with C++ on a daily basis. This is not a good idea.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (X-G)</author>
		<pubDate>Mon, 10 Aug 2009 01:36:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I will change it. But at the moment I&#39;m too lazy. It was too easy to to be correct <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />. Programming can be really annoying sometimes. It&#39;s always more difficult then it seems.</p><p>One thing interests me. When I would add a virtual destructor to my layer class. Shouldn&#39;t this solve memory problems, except for referencing objects a std::list what I wouldn&#39;t do, anyway.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Martin Kalbfuß)</author>
		<pubDate>Mon, 10 Aug 2009 02:03:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You should always have a virtual destructor if you think that the class has a possibility of being subclassed, and used as a pointer to your class (the parent). Considering that you can&#39;t really control the situation, sometimes programmers give every exposed class a virtual destructor.</p><p>The consequence of not doing this is that if your object is used on a polymorphic situation, your destructor may not be called when the object is destroyed, which is a bad plan. The consequence of having a virtual destructor when you don&#39;t need it is the cost of probably 4 bytes/object for a vtable pointer (and possibly none extra if RTTI is enabled).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gillius)</author>
		<pubDate>Mon, 10 Aug 2009 03:34:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I can&#39;t remember where I got this from but you don&#39;t have to install boost if you want a smart pointer.</p><p>I have used this reference count pointer quite a bit, and it does the job.
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">/*</span>
<span class="number">  2</span><span class="c"> * counted_ptr - simple reference counted pointer.</span>
<span class="number">  3</span><span class="c"> *</span>
<span class="number">  4</span><span class="c"> * The is a non-intrusive implementation that allocates an additional</span>
<span class="number">  5</span><span class="c"> * int and pointer for every counted object.</span>
<span class="number">  6</span><span class="c"> */</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="p">#ifndef COUNTED_PTR_H</span>
<span class="number">  9</span><span class="p">#define COUNTED_PTR_H</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="c">/* For ANSI-challenged compilers, you may want to #define</span>
<span class="number"> 12</span><span class="c"> * NO_MEMBER_TEMPLATES or explicit */</span>
<span class="number"> 13</span>
<span class="number"> 14</span><span class="p">#define NO_MEMBER_TEMPLATES</span>
<span class="number"> 15</span>
<span class="number"> 16</span><span class="k1">template</span> <span class="k3">&lt;</span><span class="k1">class</span> X&gt; <span class="k1">class</span> counted_ptr
<span class="number"> 17</span><span class="k2">{</span>
<span class="number"> 18</span>public:
<span class="number"> 19</span>    <span class="k1">typedef</span> X element_type<span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>    <span class="k1">explicit</span> counted_ptr<span class="k2">(</span>X<span class="k3">*</span> p <span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="c">// allocate a new counter</span>
<span class="number"> 22</span>        <span class="k2">:</span> itsCounter<span class="k2">(</span><span class="n">0</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">if</span> <span class="k2">(</span>p<span class="k2">)</span> itsCounter <span class="k3">=</span> <span class="k1">new</span> counter<span class="k2">(</span>p<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 23</span>    ~counted_ptr<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 24</span>        <span class="k2">{</span>release<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 25</span>    counted_ptr<span class="k2">(</span><span class="k1">const</span> counted_ptr<span class="k3">&amp;</span> r<span class="k2">)</span> <span class="k1">throw</span><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 26</span>        <span class="k2">{</span>acquire<span class="k2">(</span>r.itsCounter<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 27</span>    counted_ptr<span class="k3">&amp;</span> <span class="k1">operator</span><span class="k3">=</span><span class="k2">(</span><span class="k1">const</span> counted_ptr<span class="k3">&amp;</span> r<span class="k2">)</span>
<span class="number"> 28</span>    <span class="k2">{</span>
<span class="number"> 29</span>        <span class="k1">if</span> <span class="k2">(</span><span class="k1">this</span> <span class="k3">!</span><span class="k3">=</span> <span class="k3">&amp;</span>r<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 30</span>            release<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>            acquire<span class="k2">(</span>r.itsCounter<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>        <span class="k2">}</span>
<span class="number"> 33</span>        <span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number"> 34</span>    <span class="k2">}</span>
<span class="number"> 35</span>
<span class="number"> 36</span>    <span class="c">// timmy added</span>
<span class="number"> 37</span>    <span class="k1">bool</span> <span class="k1">operator</span><span class="k3">=</span><span class="k3">=</span><span class="k2">(</span><span class="k1">const</span> counted_ptr<span class="k3">&lt;</span>X&gt; c<span class="k2">)</span> <span class="k1">const</span>
<span class="number"> 38</span>    <span class="k2">{</span>
<span class="number"> 39</span>        <span class="k1">return</span> <span class="k2">(</span>get<span class="k2">(</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> c.get<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>    <span class="k2">}</span>
<span class="number"> 41</span>    <span class="k1">bool</span> <span class="k1">operator</span><span class="k3">!</span><span class="k3">=</span><span class="k2">(</span><span class="k1">const</span> counted_ptr<span class="k3">&lt;</span>X&gt; c<span class="k2">)</span> <span class="k1">const</span>
<span class="number"> 42</span>    <span class="k2">{</span>
<span class="number"> 43</span>        <span class="k1">return</span> <span class="k2">(</span>get<span class="k2">(</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> c.get<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>    <span class="k2">}</span>    <span class="c">// timmy added end</span>
<span class="number"> 45</span>
<span class="number"> 46</span><span class="p">#ifndef NO_MEMBER_TEMPLATES</span>
<span class="number"> 47</span>    <span class="k1">template</span> <span class="k3">&lt;</span><span class="k1">class</span> Y&gt; <span class="k1">friend</span> <span class="k1">class</span> counted_ptr<span class="k3">&lt;</span>Y&gt;<span class="k2">;</span>
<span class="number"> 48</span>    <span class="k1">template</span> <span class="k3">&lt;</span><span class="k1">class</span> Y&gt; counted_ptr<span class="k2">(</span><span class="k1">const</span> counted_ptr<span class="k3">&lt;</span>Y&gt;<span class="k3">&amp;</span> r<span class="k2">)</span> <span class="k1">throw</span><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 49</span>        <span class="k2">{</span>acquire<span class="k2">(</span>r.itsCounter<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 50</span>    <span class="k1">template</span> <span class="k3">&lt;</span><span class="k1">class</span> Y&gt; counted_ptr<span class="k3">&amp;</span> <span class="k1">operator</span><span class="k3">=</span><span class="k2">(</span><span class="k1">const</span> counted_ptr<span class="k3">&lt;</span>Y&gt;<span class="k3">&amp;</span> r<span class="k2">)</span>
<span class="number"> 51</span>    <span class="k2">{</span>
<span class="number"> 52</span>        <span class="k1">if</span> <span class="k2">(</span><span class="k1">this</span> <span class="k3">!</span><span class="k3">=</span> <span class="k3">&amp;</span>r<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 53</span>            release<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 54</span>            acquire<span class="k2">(</span>r.itsCounter<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>        <span class="k2">}</span>
<span class="number"> 56</span>        <span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number"> 57</span>    <span class="k2">}</span>
<span class="number"> 58</span><span class="p">#endif // NO_MEMBER_TEMPLATES</span>
<span class="number"> 59</span>
<span class="number"> 60</span>    X<span class="k3">&amp;</span> <span class="k1">operator</span><span class="k3">*</span><span class="k2">(</span><span class="k2">)</span>  <span class="k1">const</span> <span class="k1">throw</span><span class="k2">(</span><span class="k2">)</span>   <span class="k2">{</span><span class="k1">return</span> <span class="k3">*</span>itsCounter-&gt;ptr<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 61</span>    X<span class="k3">*</span> operator-&gt;<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span> <span class="k1">throw</span><span class="k2">(</span><span class="k2">)</span>   <span class="k2">{</span><span class="k1">return</span> itsCounter-&gt;ptr<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 62</span>    X<span class="k3">*</span> get<span class="k2">(</span><span class="k2">)</span>        <span class="k1">const</span> <span class="k1">throw</span><span class="k2">(</span><span class="k2">)</span>   <span class="k2">{</span><span class="k1">return</span> itsCounter ? itsCounter-&gt;ptr <span class="k2">:</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 63</span>    <span class="k1">bool</span> unique<span class="k2">(</span><span class="k2">)</span>   <span class="k1">const</span> <span class="k1">throw</span><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 64</span>        <span class="k2">{</span><span class="k1">return</span> <span class="k2">(</span>itsCounter ? itsCounter-&gt;count <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span> <span class="k2">:</span> <span class="k1">true</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 65</span>
<span class="number"> 66</span>private:
<span class="number"> 67</span>
<span class="number"> 68</span>    <span class="k1">struct</span> counter <span class="k2">{</span>
<span class="number"> 69</span>        counter<span class="k2">(</span>X<span class="k3">*</span> p <span class="k3">=</span> <span class="n">0</span>, <span class="k1">unsigned</span> c <span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">:</span> ptr<span class="k2">(</span>p<span class="k2">)</span>, count<span class="k2">(</span>c<span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>
<span class="number"> 70</span>        X<span class="k3">*</span>          ptr<span class="k2">;</span>
<span class="number"> 71</span>        <span class="k1">unsigned</span>    count<span class="k2">;</span>
<span class="number"> 72</span>    <span class="k2">}</span><span class="k3">*</span> itsCounter<span class="k2">;</span>
<span class="number"> 73</span>
<span class="number"> 74</span>    <span class="k1">void</span> acquire<span class="k2">(</span>counter<span class="k3">*</span> c<span class="k2">)</span> <span class="k1">throw</span><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 75</span>    <span class="k2">{</span> <span class="c">// increment the count</span>
<span class="number"> 76</span>        itsCounter <span class="k3">=</span> c<span class="k2">;</span>
<span class="number"> 77</span>        <span class="k1">if</span> <span class="k2">(</span>c<span class="k2">)</span> <span class="k3">+</span><span class="k3">+</span>c-&gt;count<span class="k2">;</span>
<span class="number"> 78</span>    <span class="k2">}</span>
<span class="number"> 79</span>
<span class="number"> 80</span>    <span class="k1">void</span> release<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 81</span>    <span class="k2">{</span> <span class="c">// decrement the count, delete if it is 0</span>
<span class="number"> 82</span>        <span class="k1">if</span> <span class="k2">(</span>itsCounter<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 83</span>            <span class="k1">if</span> <span class="k2">(</span><span class="k3">-</span><span class="k3">-</span>itsCounter-&gt;count <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 84</span>                <span class="k1">delete</span> itsCounter-&gt;ptr<span class="k2">;</span>
<span class="number"> 85</span>                <span class="k1">delete</span> itsCounter<span class="k2">;</span>
<span class="number"> 86</span>            <span class="k2">}</span>
<span class="number"> 87</span>            itsCounter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 88</span>        <span class="k2">}</span>
<span class="number"> 89</span>    <span class="k2">}</span>
<span class="number"> 90</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 91</span>
<span class="number"> 92</span><span class="p">#endif // COUNTED_PTR_H</span>
</div></div><p>

Edit:<br />It came from <a href="http://ootips.org/yonat/4dev/">here.</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Timorg)</author>
		<pubDate>Mon, 10 Aug 2009 12:57:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>smart pointers are notoriously difficult to get right (and perform well). Peter Dimov and others worked for some years on boost shared_ptr to get it right in the face of exceptions and threads, and weak_ptr as well.</p><p>Scanning that class above quickly for certain constructs, it doesn&#39;t seem to handle the exceptions. I&#39;m not sure about out-of-memory conditions. So, if your code doesn&#39;t use threads or exceptions it will probably work perfectly.</p><p>I suppose my point is, using shared_ptr is the best way to go if you can, but this counted_ptr is probably good enough for something small and not for &quot;production,&quot; and you don&#39;t need features like weak_ptr.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gillius)</author>
		<pubDate>Mon, 10 Aug 2009 22:12:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I decided to use boost. Thanks.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Martin Kalbfuß)</author>
		<pubDate>Mon, 10 Aug 2009 22:17:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>C++ just sucks because of these silly design questions. /arse <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Tue, 11 Aug 2009 04:06:46 +0000</pubDate>
	</item>
</rss>
