<?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[weak_ptr + shared_ptr design]]></title><description><![CDATA[<p>Hallo</p>
<p>seit neustem habe ich in meiner anwendung alle raw-pointer durch<br />
smart_pointer ersetzt. und da stellt sich mir die frage, ob man das eine<br />
oder andere besser/schöner schreiben kann.</p>
<p>die datenstruktur die ich verwalten will, besteht aus mehreren knoten,<br />
welche beliebig untereinander verknüpft sind. zwischen jedem knotenpaar<br />
existiert ein &quot;link&quot;-objekt, dass die verbindung näher beschreibt.</p>
<p>jeder knoten hat einen std::vector&lt;weak_ptr&lt;Link&gt; &gt; um auf seine verbindungen<br />
zugreifen zu können, jeder Link hingegen hat 2 weak_ptr&lt;Node&gt;, kennt also<br />
seine beiden enden.</p>
<p>die &quot;masterklasse&quot; verwaltet diese struktur mittels shared_ptr's auf die Knoten<br />
und Links.</p>
<p>das führt jedoch zu sehr vielen &quot;unregister&quot; funktionen, denn wenn z.b. ein<br />
knoten entfernt wird, muss dieser seine links zerstören, diese wiederrum<br />
melden sich bei den anderen knoten ab. (ein link braucht immer 2 knoten zum<br />
existieren)</p>
<p>es funktioniert zwar, aber ich glaube nicht, dass das wirklich das wahre vom<br />
ei ist. ich suche jetzt also ein paar tipps wie ich das &quot;besser&quot; machen kann.</p>
<p>(und NEIN ich schreibe keinen routenplaner).</p>
<p>MfG boost_ptr</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/265857/weak_ptr-shared_ptr-design</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 18:28:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/265857.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 29 Apr 2010 20:06:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to weak_ptr + shared_ptr design on Thu, 29 Apr 2010 20:06:48 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>seit neustem habe ich in meiner anwendung alle raw-pointer durch<br />
smart_pointer ersetzt. und da stellt sich mir die frage, ob man das eine<br />
oder andere besser/schöner schreiben kann.</p>
<p>die datenstruktur die ich verwalten will, besteht aus mehreren knoten,<br />
welche beliebig untereinander verknüpft sind. zwischen jedem knotenpaar<br />
existiert ein &quot;link&quot;-objekt, dass die verbindung näher beschreibt.</p>
<p>jeder knoten hat einen std::vector&lt;weak_ptr&lt;Link&gt; &gt; um auf seine verbindungen<br />
zugreifen zu können, jeder Link hingegen hat 2 weak_ptr&lt;Node&gt;, kennt also<br />
seine beiden enden.</p>
<p>die &quot;masterklasse&quot; verwaltet diese struktur mittels shared_ptr's auf die Knoten<br />
und Links.</p>
<p>das führt jedoch zu sehr vielen &quot;unregister&quot; funktionen, denn wenn z.b. ein<br />
knoten entfernt wird, muss dieser seine links zerstören, diese wiederrum<br />
melden sich bei den anderen knoten ab. (ein link braucht immer 2 knoten zum<br />
existieren)</p>
<p>es funktioniert zwar, aber ich glaube nicht, dass das wirklich das wahre vom<br />
ei ist. ich suche jetzt also ein paar tipps wie ich das &quot;besser&quot; machen kann.</p>
<p>(und NEIN ich schreibe keinen routenplaner).</p>
<p>MfG boost_ptr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890162</guid><dc:creator><![CDATA[boost_ptr]]></dc:creator><pubDate>Thu, 29 Apr 2010 20:06:48 GMT</pubDate></item><item><title><![CDATA[Reply to weak_ptr + shared_ptr design on Thu, 29 Apr 2010 21:20:47 GMT]]></title><description><![CDATA[<p>Alle Zeiger durch Smart-Pointer zu ersetzen kommt mir zu kategorisch vor. Wenn du passive, nicht besitzende Zeiger hast, deren Ziel keine spezielle Lebensdauer oder Kopiersemantik (à la <code>shared_ptr</code> ) besitzt, kannst du ruhig normale Zeiger nehmen.</p>
<p>Smart-Pointer empfehlen sich vor allem in Anwendungsbereichen, die sonst manuelle Speicherverwaltung und zusätzlichen Code (z.B. für Fehlerbehandlung mit Exceptions) erfordern, aber lange nicht überall. Nicht zuletzt sollte man den Overhead bedenken, der oftmals gar nicht nötig ist. Sehr viele Programmierer machen zum Beispiel den Fehler, <code>shared_ptr</code> in Container zu stopfen, obwohl Pointer-Container (wie die von Boost) viel klüger wären.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890199</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 29 Apr 2010 21:20:47 GMT</pubDate></item><item><title><![CDATA[Reply to weak_ptr + shared_ptr design on Fri, 30 Apr 2010 08:39:24 GMT]]></title><description><![CDATA[<p>boost_ptr schrieb:</p>
<blockquote>
<p>seit neustem habe ich in meiner anwendung alle raw-pointer durch smart_pointer ersetzt. und da stellt sich mir die frage, ob man das eine oder andere besser/schöner schreiben kann.</p>
</blockquote>
<p>Auch wenn ich ein Fan von Smartpointern bin, würde ich wie Nexus davon abraten den shared_ptr auf biegen und brechen zu verwenden. shared_ptr ist der &quot;teuerste&quot; aller Smartpointer, bevor man diesen einsetzt sollte man zumindest schauen ob nicht &quot;billigere&quot; Varianten in den Fall ausreichen (Ggf. sogar normale Zeiger in Kombination mit den Boost Zeigercontainern).</p>
<p>Gerade in deinem Fall hört es sich so an, als würde letzteres ausreichen, sofern wirklich eine Klasse die Verwaltung übernimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890319</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 30 Apr 2010 08:39:24 GMT</pubDate></item></channel></rss>