<?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[std::shared_ptr vergleichen]]></title><description><![CDATA[<p>Hey Leute,</p>
<p>kann man es irgendwie elegant schaffen, dass 2 std::shared_ptr s_ptr1, s_ptr2 gleich sind, d.h. s_ptr1 == s_ptr2, genau dann wenn *s_ptr1 == *s_ptr2?</p>
<p>Das heißt die Pointer sollen genau dann gleich sein bzgl &quot;==&quot;, wenn die durch sie referenzierten Objekte bzgl &quot;==&quot; gleich sind (sofern &quot;==&quot; für sie definiert)</p>
<p>Gruß <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305717/std-shared_ptr-vergleichen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 14:35:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305717.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 06 Jul 2012 11:31:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::shared_ptr vergleichen on Fri, 06 Jul 2012 11:31:50 GMT]]></title><description><![CDATA[<p>Hey Leute,</p>
<p>kann man es irgendwie elegant schaffen, dass 2 std::shared_ptr s_ptr1, s_ptr2 gleich sind, d.h. s_ptr1 == s_ptr2, genau dann wenn *s_ptr1 == *s_ptr2?</p>
<p>Das heißt die Pointer sollen genau dann gleich sein bzgl &quot;==&quot;, wenn die durch sie referenzierten Objekte bzgl &quot;==&quot; gleich sind (sofern &quot;==&quot; für sie definiert)</p>
<p>Gruß <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230586</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Fri, 06 Jul 2012 11:31:50 GMT</pubDate></item><item><title><![CDATA[Reply to std::shared_ptr vergleichen on Fri, 06 Jul 2012 11:51:03 GMT]]></title><description><![CDATA[<p>In welchem Zusammenhang? Du willst doch sicherlich irgendwo eine Vergleichsfunktion angeben, so wie das klingt. Dann gib doch einfach diese Art von Vergleich an, entweder als Funktion oder Lambaausdruck (je nach Standardversion).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230593</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 06 Jul 2012 11:51:03 GMT</pubDate></item><item><title><![CDATA[Reply to std::shared_ptr vergleichen on Fri, 06 Jul 2012 13:51:15 GMT]]></title><description><![CDATA[<p>MatheStein schrieb:</p>
<blockquote>
<p>kann man es irgendwie elegant schaffen, dass 2 std::shared_ptr s_ptr1, s_ptr2 gleich sind, d.h. s_ptr1 == s_ptr2, genau dann wenn *s_ptr1 == *s_ptr2?</p>
<p>Das heißt die Pointer sollen genau dann gleich sein bzgl &quot;==&quot;, wenn die durch sie referenzierten Objekte bzgl &quot;==&quot; gleich sind (sofern &quot;==&quot; für sie definiert)</p>
</blockquote>
<p>Das magst du im Moment für eine gute Idee halten, ist es aber nicht. Und zum Glück ist das auch nicht möglich, es sei denn, du definierst dir deine eigene Zeiger-Klasse, wovon ich aber abraten möchte.</p>
<p>Wo glaubst du, so ein Verhalten gebrauchen zu können?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230616</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 06 Jul 2012 13:51:15 GMT</pubDate></item><item><title><![CDATA[Reply to std::shared_ptr vergleichen on Fri, 06 Jul 2012 15:08:12 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;class T, class U&gt; inline bool operator==(shared_ptr&lt;T&gt; const &amp; a, shared_ptr&lt;U&gt; const &amp; b)
{
  // du bist dran
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2230635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230635</guid><dc:creator><![CDATA[nurf]]></dc:creator><pubDate>Fri, 06 Jul 2012 15:08:12 GMT</pubDate></item><item><title><![CDATA[Reply to std::shared_ptr vergleichen on Fri, 06 Jul 2012 15:13:18 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18674">@nurf</a>: Wie schön, dass du die Hinweise der Vorposter ignorierst.</p>
<p>Ich kann mich krümelkacker nur anschliessen, das Gewollte macht keinen Sinn. Wenn man auf Objektgleichheit prüfen möchte, dereferenziert man eben. Was soll z.B. ein Vergleich mit Nullzeigern als Ergebnis haben? Undefiniertes Verhalten, weil automatisch dereferenziert wird? Es ist schon gut, dass der für <code>std::shared_ptr</code> überladene <code>operator==</code> die Semantik von rohen Zeigern übernimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230636</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 06 Jul 2012 15:13:18 GMT</pubDate></item><item><title><![CDATA[Reply to std::shared_ptr vergleichen on Fri, 06 Jul 2012 15:20:09 GMT]]></title><description><![CDATA[<p>nurf schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;class T, class U&gt; inline bool operator==(shared_ptr&lt;T&gt; const &amp; a, shared_ptr&lt;U&gt; const &amp; b)
{
  // du bist dran
}
</code></pre>
</blockquote>
<p>Ich denke nicht, dass das funktionieren wird; denn shared_ptr definiert schon einen solchen Operator. Falls dieser auch als Template definiert wurde, müsste es eine Compiler-Fehlermeldung à la &quot;ambiguous call&quot; geben. Falls Dein Operator bei der Namensauflösung nicht gefunden wird oder shared_ptr den operator== als inline-friend definiert, hat dein Template gar keinen Effekt, weil der &quot;richtige&quot; Operator dann bei der Überladungsauflösung gewinnt.</p>
<p>So oder so, ist es immer noch eine schlechte Idee <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Die Semantik von operator== auf shared_ptr ist schon definiert, und die sollte man nicht ändern wollen.</p>
<p>Ich kann mir eher vorstellen, dass der Fragesteller auch mit einem benutzerdefinierten Predicate zufrieden zu stellen ist. Allerdings fehlt dazu noch mehr Information vom Fragesteller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230639</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 06 Jul 2012 15:20:09 GMT</pubDate></item><item><title><![CDATA[Reply to std::shared_ptr vergleichen on Fri, 06 Jul 2012 16:20:14 GMT]]></title><description><![CDATA[<p>Danke für eure Hilfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Wie schon von euch prophezeit gibt es eine elegantere Lösung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> War drauf und dran selbst eine Sortierung auf einem Vector aus shared_ptr zu programmieren, jedoch sollte die Sortierung bzgl. der referenzierten Objekte sein.</p>
<p>Nutze jetzt die std::sort Funktion <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Besten Dank, Gruß und schönes Wochenende an alle <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230656</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Fri, 06 Jul 2012 16:20:14 GMT</pubDate></item><item><title><![CDATA[Reply to std::shared_ptr vergleichen on Fri, 06 Jul 2012 16:40:05 GMT]]></title><description><![CDATA[<p>Übrigens: <code>vector&lt;shared_ptr&lt;T&gt;&gt;</code> willst du meistens nicht. Eigentlich nur dann, wenn die Elemente wirklich geteilt werden, d.h. es gibt mehrere <code>shared_ptr</code> s auf ein Objekt.</p>
<p>Alternativen sind <code>vector&lt;T&gt;</code> (falls möglich), <code>boost::ptr_vector&lt;T&gt;</code> oder <code>vector&lt;unique_ptr&lt;T&gt;&gt;</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230667</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 06 Jul 2012 16:40:05 GMT</pubDate></item><item><title><![CDATA[Reply to std::shared_ptr vergleichen on Sat, 07 Jul 2012 08:15:35 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Übrigens: <code>vector&lt;shared_ptr&lt;T&gt;&gt;</code> willst du meistens nicht. Eigentlich nur dann, wenn die Elemente wirklich geteilt werden, d.h. es gibt mehrere <code>shared_ptr</code> s auf ein Objekt.</p>
<p>Alternativen sind <code>vector&lt;T&gt;</code> (falls möglich), <code>boost::ptr_vector&lt;T&gt;</code> oder <code>vector&lt;unique_ptr&lt;T&gt;&gt;</code> .</p>
</blockquote>
<p>Warum sollte man vector&lt;shared_ptr&lt;T&gt;&gt; nicht wollen? vector&lt;unique_ptr&lt;T&gt;&gt; ist nur eingeschränkt zu verwenden (z.B. kein Reserve).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230785</guid><dc:creator><![CDATA[Pavilion]]></dc:creator><pubDate>Sat, 07 Jul 2012 08:15:35 GMT</pubDate></item><item><title><![CDATA[Reply to std::shared_ptr vergleichen on Sat, 07 Jul 2012 08:18:40 GMT]]></title><description><![CDATA[<p>Warum sollte Reserve nicht möglich sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230786</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sat, 07 Jul 2012 08:18:40 GMT</pubDate></item><item><title><![CDATA[Reply to std::shared_ptr vergleichen on Sat, 07 Jul 2012 08:20:21 GMT]]></title><description><![CDATA[<p>Pavilion schrieb:</p>
<blockquote>
<p>vector&lt;unique_ptr&lt;T&gt;&gt; ist nur eingeschränkt zu verwenden (z.B. kein Reserve).</p>
</blockquote>
<p>Selbstverständlich geht reserve. Und auch resize geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230787</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Sat, 07 Jul 2012 08:20:21 GMT</pubDate></item></channel></rss>