<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>stl list and pointers</title>
		<link>http://www.allegro.cc/forums/view/302125</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 18 Sep 2003 16:44:45 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>i have a stl list of myclass and a pointer to a myclass-objects. now i do listofmyclass.push_back() to create one object of myclass. how can i now assign the pointer to the myclass-object to the new object that was just created?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Thu, 18 Sep 2003 05:00:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
</p><div class="source-code snippet"><div class="inner"><pre>   mypointer <span class="k3">=</span> <span class="k3">&amp;</span>mylist.back<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (23yrold3yrold)</author>
		<pubDate>Thu, 18 Sep 2003 05:05:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>listofmyclass.push_back() is invalid C++ code.  You need to push back some object.  If you do that you have a pointer to it.</p><p>You can do this:</p><div class="source-code snippet"><div class="inner"><pre>listofmyclass.push_back<span class="k2">(</span> MyClass<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
MyClass<span class="k3">*</span> <span class="k3">=</span> <span class="k3">&amp;</span><span class="k2">(</span><span class="k3">*</span>listofmyclass.rbegin<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

I believe.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gillius)</author>
		<pubDate>Thu, 18 Sep 2003 05:05:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>mypointer = &amp;mylist.back();</p></div></div><p>
sounds good i&#39;ll test it.<br />i tried to do mypoiter=&amp;mylist.begin(); but that didn&#39;t work. i think there is also a member called pointer in the stl list class but don&#39;t know how to access it.<br />and how to access a pointer that is the second one of three elements for example?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Thu, 18 Sep 2003 12:54:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>But if you do this:</p><div class="source-code snippet"><div class="inner"><pre>list<span class="k3">&lt;</span>MyClass&gt; listofmyclass<span class="k2">;</span>
MyClass<span class="k3">*</span> mc <span class="k3">=</span> <span class="k1">new</span> MyClass<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
listofmyclass.push_back<span class="k2">(</span><span class="k3">*</span>mc<span class="k2">)</span><span class="k2">;</span>
mc <span class="k3">=</span> <span class="k3">&amp;</span>listofmyclass.back<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

you&#39;ll leak memory. The memory allocated in line 2 is copied to a new list entry in line 3. Then the pointer is set to the copy in line 4, leaving the original data allocated, but unreferenced.<br />Correctly, you would either:</p><div class="source-code snippet"><div class="inner"><pre>list<span class="k3">&lt;</span>MyClass&gt; listofmyclass<span class="k2">;</span>
MyClass<span class="k3">*</span> mc <span class="k3">=</span> <span class="k1">new</span> MyClass<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
listofmyclass.push_back<span class="k2">(</span><span class="k3">*</span>mc<span class="k2">)</span><span class="k2">;</span>
<span class="k1">delete</span> mc<span class="k2">;</span>
mc <span class="k3">=</span> <span class="k3">&amp;</span>listofmyclass.back<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

or:
</p><div class="source-code snippet"><div class="inner"><pre>list<span class="k3">&lt;</span>MyClass<span class="k3">*</span><span class="k3">&gt;</span> listofmyclass<span class="k2">;</span>
MyClass<span class="k3">*</span> mc <span class="k3">=</span> <span class="k1">new</span> MyClass<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
listofmyclass.push_back<span class="k2">(</span>mc<span class="k2">)</span><span class="k2">;</span>
<span class="c">// ...and somewhere else to clean up:</span>
MyClass<span class="k3">*</span> mc <span class="k3">=</span> <span class="k3">&amp;</span>listofmyclass.pop_back<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">delete</span> mc<span class="k2">;</span>
<span class="c">// or something similar.</span>
</pre></div></div><p>
...in which case you will have to delete all list entries yourself when you no longer need them. The list now only holds pointers to objects.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Thu, 18 Sep 2003 13:23:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>i&#39;m not talking about a list of pointers but a list of objects. so no new or delete.<br />i was wondering if this would work: pointer=&amp; (*iteratorformylist)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Thu, 18 Sep 2003 13:33:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do the easy thing of first storing the created value in a local pointer, then push back the local pointer&#39;s value:</p><div class="source-code snippet"><div class="inner"><pre>MyClass <span class="k3">*</span>obj <span class="k3">=</span> <span class="k1">new</span> MyClass<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
objList.push_back<span class="k2">(</span>obj<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (axilmar)</author>
		<pubDate>Thu, 18 Sep 2003 13:37:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>i was wondering if this would work: pointer=&amp; (*iteratorformylist)</p></div></div><p>

It should. The reason mypointer=&amp;mylist.begin(); doesn&#39;t work is because begin() is an iterator, not an element. mypointer=&amp;mylist.first() should work.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (X-G)</author>
		<pubDate>Thu, 18 Sep 2003 14:23:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p> It should. The reason mypointer=&amp;mylist.begin(); doesn&#39;t work is because begin() is an iterator, not an element. mypointer=&amp;mylist.first() should work.</p></div></div><p>The function is front(), not first().
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (23yrold3yrold)</author>
		<pubDate>Thu, 18 Sep 2003 15:45:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
Yes, well, uh ... LOOK BEHIND YOU! A THREE-HEADED MONKEY!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (X-G)</author>
		<pubDate>Thu, 18 Sep 2003 16:09:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>where?</p><p>someone said that list.push_back() is invalid.<br />so i have to call at last list.push_back(myclass()); ??
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Thu, 18 Sep 2003 16:26:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
Yes - you can&#39;t push nothing onto a list. You need to make an object and push it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (X-G)</author>
		<pubDate>Thu, 18 Sep 2003 16:44:45 +0000</pubDate>
	</item>
</rss>
