<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[smart pointer]]></title><description><![CDATA[<p>Ich bin auf der Suche nach dem richtigen Smart Pointer:</p>
<p>Ich hab eine Menge von Punkten, die ich bisher als std::vector&lt;std::vector&lt;double&gt; &gt; &quot;allpoints&quot; gespeichert hab. Zusätzlich hab ich eine Datenstruktur, die die Punkte speichern soll. Es sollen allerdings aus Speicherplatzgründen, keine Kopien der Punkte erstellt werden. Bisher hab ich diese Punkt-Pointer als std::vector&lt;double&gt;* in der Datenstruktur abgelegt. Das geht solange gut, bis man Punkte zu &quot;allpoints&quot; hinzufügt und der std::vector neuen Speicher allokiert...</p>
<p>Ich suche jetzt den richtigen Smart Pointer, der die Anzahl der Referenzen zählt, sodass ich die Punktemenge als std::vector&lt;XY&lt;std::vector&lt;double&gt; &gt; &gt; speicher kann und die Punkte in der Datenstrutkur entsprechend als XY&lt;std::vector&lt;double&gt; &gt;. Was muss ich da nehmen (C++11 ist in Ordnung).</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321110/smart-pointer</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 13:15:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321110.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 24 Oct 2013 13:11:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to smart pointer on Thu, 24 Oct 2013 13:11:09 GMT]]></title><description><![CDATA[<p>Ich bin auf der Suche nach dem richtigen Smart Pointer:</p>
<p>Ich hab eine Menge von Punkten, die ich bisher als std::vector&lt;std::vector&lt;double&gt; &gt; &quot;allpoints&quot; gespeichert hab. Zusätzlich hab ich eine Datenstruktur, die die Punkte speichern soll. Es sollen allerdings aus Speicherplatzgründen, keine Kopien der Punkte erstellt werden. Bisher hab ich diese Punkt-Pointer als std::vector&lt;double&gt;* in der Datenstruktur abgelegt. Das geht solange gut, bis man Punkte zu &quot;allpoints&quot; hinzufügt und der std::vector neuen Speicher allokiert...</p>
<p>Ich suche jetzt den richtigen Smart Pointer, der die Anzahl der Referenzen zählt, sodass ich die Punktemenge als std::vector&lt;XY&lt;std::vector&lt;double&gt; &gt; &gt; speicher kann und die Punkte in der Datenstrutkur entsprechend als XY&lt;std::vector&lt;double&gt; &gt;. Was muss ich da nehmen (C++11 ist in Ordnung).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362618</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Thu, 24 Oct 2013 13:11:09 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer on Thu, 24 Oct 2013 13:16:20 GMT]]></title><description><![CDATA[<p>std::shared_pointer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362622</guid><dc:creator><![CDATA[not smart]]></dc:creator><pubDate>Thu, 24 Oct 2013 13:16:20 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer on Thu, 24 Oct 2013 13:21:26 GMT]]></title><description><![CDATA[<p>Du meinst std::shared_ptr ?</p>
<p>thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362624</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Thu, 24 Oct 2013 13:21:26 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer on Thu, 24 Oct 2013 13:22:30 GMT]]></title><description><![CDATA[<p>Bist du sicher, dass du geteilten Besitz hast?</p>
<p>Oder kannst du im einen Container einfach die Punkte als Werte abspeichern, und im anderen normale Zeiger darauf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362627</guid><dc:creator><![CDATA[Skeptiker]]></dc:creator><pubDate>Thu, 24 Oct 2013 13:22:30 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer on Thu, 24 Oct 2013 13:27:39 GMT]]></title><description><![CDATA[<p>Alle Punkte, die in meiner eigenen Datenstruktur vorkommen, existieren auch im Sammelcontainer.</p>
<p>Gibt es da etwas besseres als shared_ptr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362628</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Thu, 24 Oct 2013 13:27:39 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer on Thu, 24 Oct 2013 13:32:46 GMT]]></title><description><![CDATA[<p>Wie wärs wenn du einfach direkt allpoints benutzt? Bzw. einen Pointer/Referenz da drauf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362631</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Thu, 24 Oct 2013 13:32:46 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer on Thu, 24 Oct 2013 13:33:22 GMT]]></title><description><![CDATA[<p>Wer besitzt die Punkte? Derjenige hält sie als Objekte. Die Container, die nur darauf verweisen, halten rohe Zeiger.</p>
<p>Kein Grund für <code>shared_ptr</code> ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362633</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 24 Oct 2013 13:33:22 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer on Thu, 24 Oct 2013 13:33:25 GMT]]></title><description><![CDATA[<p>Es kommt drauf an, wieso du die Daten mehrmals speicherst bzw. von mehreren Orten Zugriff drauf haben willst, sie aber nicht duplizieren willst.</p>
<p>Wenn du später so Späße wie std::vector&lt;std::shared_ptr&lt;double&gt;&gt; und MyDataStructure&lt;std::shared_ptr&lt;double&gt;&gt; hast, dann sieht das erstmal ziemlich nach Overhead aus. Shared_ptr kostet mit seiner Referenzzählung ja auch etwas.</p>
<p>Eventuell würde sich eine Funktion/ethode zum Synchronisieren beider Datenstrukturen, die periodisch oft aufgerufen wird, auch lohnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362634</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 24 Oct 2013 13:33:25 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer on Thu, 24 Oct 2013 14:10:07 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wer besitzt die Punkte? Derjenige hält sie als Objekte. Die Container, die nur darauf verweisen, halten rohe Zeiger.</p>
<p>Kein Grund für <code>shared_ptr</code> ...</p>
</blockquote>
<p>So hab ich es bisher auch gemacht. Problematisch wird es, wenn ich nun neue Punkte hinzufüge und der std::vector, der alle Punkte enthält, wachsen muss: Dann werden alle Zeigen in meinen Datenstrukturen ungültig, deshalb dachte ich, ein Smartpointer wäre besser.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18806">@Skym0sh0</a>:<br />
Ich speichere keine Skalare sondern niedrig-dimensionale Punkte (ich denke, typisch wären vielleicht 10 Dimensionen, maximal jedoch sowas wie 20). Wie viel verbraucht denn ein shared_ptr? Eine Speicheradresse für die Daten + eine für den Zähler + ein geteilten Zähler. Bei 10 Dimensionen ist der Overhead noch erträglich. Einsparen könnte man auch etwas, wenn sowas wie ein Dynarray (<a href="http://www.c-plusplus.net/forum/311821-full" rel="nofollow">http://www.c-plusplus.net/forum/311821-full</a>) benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362647</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Thu, 24 Oct 2013 14:10:07 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer on Thu, 24 Oct 2013 14:19:13 GMT]]></title><description><![CDATA[<p>Ramanujan schrieb:</p>
<blockquote>
<p>So hab ich es bisher auch gemacht. Problematisch wird es, wenn ich nun neue Punkte hinzufüge und der std::vector, der alle Punkte enthält, wachsen muss: Dann werden alle Zeigen in meinen Datenstrukturen ungültig, deshalb dachte ich, ein Smartpointer wäre besser.</p>
</blockquote>
<p>Versuchs mit <code>std::deque</code> , dessen <code>push_back()</code> invalidiert Referenzen und Zeiger nicht. Beim Einfügen in der Mitte oder Löschen musst du aber nach wie vor aufpassen.</p>
<p>Wenn du unbedingt Smart-Pointer brauchen solltest, wäre immer noch <code>std::unique_ptr</code> vorzuziehen.</p>
<p>Ramanujan schrieb:</p>
<blockquote>
<p>Wie viel verbraucht denn ein shared_ptr? Eine Speicheradresse für die Daten + eine für den Zähler + ein geteilten Zähler.</p>
</blockquote>
<p>Dazu kommt das Deleter-Objekt. Einiges kann zwar zusammen allokiert werden, braucht aber natürlich trotzdem Speicher. Vergiss aber auch nicht den Rechenzeit-Overhead von <code>std::shared_ptr</code> , der durch Reference-Counting und Multithreading entsteht. Aber wie gesagt, hier ist <code>shared_ptr</code> ohnehin nicht angebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362648</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 24 Oct 2013 14:19:13 GMT</pubDate></item></channel></rss>