<?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[shared_ptr für Argumente Sinnvoll?]]></title><description><![CDATA[<p>Hallo,<br />
kann man in C++ ohne Performance Verlust statt Referenzen und Zeigern einfach immer shared_ptr nehmen?<br />
Ich denke ihr fragt euch warum, es hat den Sinn, da öfters mal ein Argument an ein Objekt weiter gegeben wird(Das Objekt speichert z.B. dann dieses Argument um es später zu verwenden), dass kurz danach aber ungültig wird und so im Speicher gelöscht wird, jetzt kann das Objekt ja nicht mehr auf die Variable zugreifen.<br />
Was mir dagegen einfällt, um das kopieren von Argumenten zu unterbinden war entweder einfach den Speicher manuell zu verwalten(new und delete), was jedoch ziemlich Fehleranfällig wäre, oder einfach das Java Prinzip zu imitieren, indem man mit shared_ptr arbeitet.<br />
Ich kenne mich mir shared_ptr nicht so aus und weiß deshalb auch nicht, ob man das so machen sollte.<br />
Ich hoffe ich denke nicht all zu falsch und ihr könnt mir etwas helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321768/shared_ptr-für-argumente-sinnvoll</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Jul 2026 02:55:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321768.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 23 Nov 2013 18:05:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sat, 23 Nov 2013 18:05:50 GMT]]></title><description><![CDATA[<p>Hallo,<br />
kann man in C++ ohne Performance Verlust statt Referenzen und Zeigern einfach immer shared_ptr nehmen?<br />
Ich denke ihr fragt euch warum, es hat den Sinn, da öfters mal ein Argument an ein Objekt weiter gegeben wird(Das Objekt speichert z.B. dann dieses Argument um es später zu verwenden), dass kurz danach aber ungültig wird und so im Speicher gelöscht wird, jetzt kann das Objekt ja nicht mehr auf die Variable zugreifen.<br />
Was mir dagegen einfällt, um das kopieren von Argumenten zu unterbinden war entweder einfach den Speicher manuell zu verwalten(new und delete), was jedoch ziemlich Fehleranfällig wäre, oder einfach das Java Prinzip zu imitieren, indem man mit shared_ptr arbeitet.<br />
Ich kenne mich mir shared_ptr nicht so aus und weiß deshalb auch nicht, ob man das so machen sollte.<br />
Ich hoffe ich denke nicht all zu falsch und ihr könnt mir etwas helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367457</guid><dc:creator><![CDATA[BuschmannMichael]]></dc:creator><pubDate>Sat, 23 Nov 2013 18:05:50 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sat, 23 Nov 2013 18:12:54 GMT]]></title><description><![CDATA[<p>Versuche shared_ptr Nutzung zu vermeiden.<br />
Wenn du ein Objekt auf dem Heap hast, halte es via unique_ptr in einer geeigneten Funktion/Klasse.<br />
Braucht eine andere Funktion dieses Objekt, übergib es als Referenz.<br />
Braucht eine andere Klasse dieses Objekt speichere in der Klasse einen Pointer darauf.<br />
Nur - und nur dann - wenn die andere Klasse dieses Objekt auch besitzt - sprich, wenn diese das Objekt weiterreferenzieren soll, auch wenn der alte Besitzer nicht mehr exisitiert, verwende shared_ptr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367460</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 23 Nov 2013 18:12:54 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sat, 23 Nov 2013 18:34:13 GMT]]></title><description><![CDATA[<p>Das heißt, ich kann unqiue_ptr benutzten, ohne einen Performance Verlust zu erleiden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367469</guid><dc:creator><![CDATA[BuschmannMichael]]></dc:creator><pubDate>Sat, 23 Nov 2013 18:34:13 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sat, 23 Nov 2013 18:39:59 GMT]]></title><description><![CDATA[<p>BuschmannMichael schrieb:</p>
<blockquote>
<p>Das heißt, ich kann unqiue_ptr benutzten, ohne einen Performance Verlust zu erleiden?</p>
</blockquote>
<p>Ja.<br />
unique_ptr bietet keinen Overhead.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367473</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 23 Nov 2013 18:39:59 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sat, 23 Nov 2013 18:44:38 GMT]]></title><description><![CDATA[<blockquote>
<p>kann man in C++ ohne Performance Verlust statt Referenzen und Zeigern einfach immer shared_ptr nehmen?</p>
</blockquote>
<p>Das sind drei verschiedene Dinge. Werfe sie nicht in einen Topf. Und <code>shared_ptr</code> ist, wie Nathan schon erklärt hat, für shared ownership da. Standardmäßig verwendet man <code>unique_ptr</code> , und auch nur, wenn man tatsächlich einen besitzenden Smart-Pointer braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367475</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 23 Nov 2013 18:44:38 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sat, 23 Nov 2013 22:13:57 GMT]]></title><description><![CDATA[<p>Mh, mein Problem ist, das ich nie weiß, wenn ich Funktionen habe der ich Argumente gebe, wie ich eine Kopie des Parameters vermeiden kann, besonders wenn es in einem Programm auf Geschwindigkeit ankommt.<br />
In Java war das ja nie ein Problem, da das ja im Prinzip wie der shared_ptr war, jede Variable(Außer Primitive Typen) waren Referenzen und wurden gelöscht sobald die Variable nicht mehr gebraucht bzw.Referenziert wurde, in C++ sobald der Gültigkeitsbereich abläuft, aber wie ihr schon sagt, kann/sollte ich nicht jede Variable als shared_ptr deklarieren.<br />
Nur weiß ich jetzt nicht wie ich diesen Bereich in C++ behandeln soll.<br />
Ich hoffe jemand kann mir weiterhelfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367521</guid><dc:creator><![CDATA[BuschmannMichael]]></dc:creator><pubDate>Sat, 23 Nov 2013 22:13:57 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sat, 23 Nov 2013 22:22:15 GMT]]></title><description><![CDATA[<p>Einfach per Referenz übergeben:</p>
<pre><code class="language-cpp">void f(const grosse_klasse&amp; parameter)
  ...
</code></pre>
<p>Ist sogar besser wie in Java, da garantiert wird, dass der Parameter nicht verändert werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367522</guid><dc:creator><![CDATA[c++!=java]]></dc:creator><pubDate>Sat, 23 Nov 2013 22:22:15 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sat, 23 Nov 2013 22:42:27 GMT]]></title><description><![CDATA[<blockquote>
<p>wie ich eine Kopie des Parameters vermeiden kann</p>
</blockquote>
<p>Indem du nicht das Objekt selbst, sondern einen Verweis darauf an die Funktion gibst. Dafür gibt es drei Möglichkeiten: Zeiger, Referenzen, oder einen Wrapper um eines von Beiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367526</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 23 Nov 2013 22:42:27 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sat, 23 Nov 2013 22:45:03 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Dafür gibt es drei Möglichkeiten: Zeiger, Referenzen, oder einen Wrapper um eines von Beiden.</p>
</blockquote>
<p>Wrapper um Referenzen lieber nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367527</guid><dc:creator><![CDATA[liebernicht]]></dc:creator><pubDate>Sat, 23 Nov 2013 22:45:03 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sat, 23 Nov 2013 22:51:12 GMT]]></title><description><![CDATA[<p>liebernicht schrieb:</p>
<blockquote>
<p>Arcoth schrieb:</p>
<blockquote>
<p>Dafür gibt es drei Möglichkeiten: Zeiger, Referenzen, oder einen Wrapper um eines von Beiden.</p>
</blockquote>
<p>Wrapper um Referenzen lieber nicht.</p>
</blockquote>
<p>Also ich finde <code>reference_wrapper</code> schon sinnvoll. (nicht als Funktionsparameter, i.A.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367528</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 23 Nov 2013 22:51:12 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sat, 23 Nov 2013 23:01:12 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>liebernicht schrieb:</p>
<blockquote>
<p>Arcoth schrieb:</p>
<blockquote>
<p>Dafür gibt es drei Möglichkeiten: Zeiger, Referenzen, oder einen Wrapper um eines von Beiden.</p>
</blockquote>
<p>Wrapper um Referenzen lieber nicht.</p>
</blockquote>
<p>Also ich finde <code>reference_wrapper</code> schon sinnvoll. (nicht als Funktionsparameter, i.A.)</p>
</blockquote>
<p>reference_wrapper ist aber ein misnomer. Es ist unmöglich, reference_wrapper mit einer Referenz zu implementieren. (In Wirklichkeit ist es ein pointer_wrapper)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367533</guid><dc:creator><![CDATA[liebernicht]]></dc:creator><pubDate>Sat, 23 Nov 2013 23:01:12 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sat, 23 Nov 2013 23:11:25 GMT]]></title><description><![CDATA[<p>Ein pointer_wrapper könnte aber den null-Pointer enthalten. Der reference_wrapper bringt dieselben Garantien mit sich, die eben auch eine Referenz bringt. Naja, vielleicht gibt es irgendwelchen abstrusen Fälle, wo das kopieren der Referenz die Lebenszeit verlängern würde, aber der reference_wrapper sich anders verhält oder andersherum oder wie auch immmer... aber ansonsten...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367539</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Sat, 23 Nov 2013 23:11:25 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sat, 23 Nov 2013 23:16:56 GMT]]></title><description><![CDATA[<blockquote>
<p>Es ist unmöglich, reference_wrapper mit einer Referenz zu implementieren.</p>
</blockquote>
<p>Implementationsdetails sind für die Semantik irrelevant.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367540</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 23 Nov 2013 23:16:56 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sat, 23 Nov 2013 23:23:33 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<blockquote>
<p>Es ist unmöglich, reference_wrapper mit einer Referenz zu implementieren.</p>
</blockquote>
<p>Implementationsdetails sind für die Semantik irrelevant.</p>
</blockquote>
<p>Dann sind wir uns ja einig, dass es nicht sinnvoll ist, eine Referenz zu wrappen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367542</guid><dc:creator><![CDATA[liebernicht]]></dc:creator><pubDate>Sat, 23 Nov 2013 23:23:33 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sat, 23 Nov 2013 23:29:09 GMT]]></title><description><![CDATA[<p>Der Sinn und Zweck von reference_wrapper ist es ja eigentlich doch auch nicht direkt eine Referenz zu wrappen, sondern Information bezüglich der Behandlungsweise an Funktionstemplates weiterzureichen, oder etwa nicht? Also Qualifizierer reinzu&quot;pushen&quot;, anstatt implizit und nicht steuerbar &quot;ziehen&quot; zu lassen. Oder habe ich da etwas falsch verstanden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367543</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Sat, 23 Nov 2013 23:29:09 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sun, 24 Nov 2013 07:28:04 GMT]]></title><description><![CDATA[<p>Ja zunächst mal würde ich ja auch Referenzen für Argumente nehmen,<br />
aber oft läuft dann später der Namensraum des Prameters ab, sodass ich später nicht mehr mit dem Übergebenen Parameter arbeiten kann.<br />
Meine Idee war eigentlich als Parameter dann einfach einen unique_ptr zu nehmen, sodass ich den Gültigkeitsbereich verschieben kann.</p>
<p>Und noch eine Frage, wenn ich eine Constante Referenz übergebe, ist doch nur sozusagen die Speicheradresse constant, sodass man immer noch sämtliche Funktionen der Parameters ausführen kann(Also mann kann der Referenz keinen neuen Referendar zuweisen)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367554</guid><dc:creator><![CDATA[BuschmannMichael]]></dc:creator><pubDate>Sun, 24 Nov 2013 07:28:04 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sun, 24 Nov 2013 09:38:41 GMT]]></title><description><![CDATA[<p>BuschmannMichael schrieb:</p>
<blockquote>
<p>aber oft läuft dann später der Namensraum des Prameters ab, sodass ich später nicht mehr mit dem übergebenen Parameter arbeiten kann.</p>
</blockquote>
<p>Wat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Du meinst wohl, die Variable muss nach Ende des Scopes erhalten bleiben. Dann musst du einen smart-pointer erzeugen, am besten unique_ptr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367563</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Sun, 24 Nov 2013 09:38:41 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr für Argumente Sinnvoll? on Sun, 24 Nov 2013 10:20:51 GMT]]></title><description><![CDATA[<p>BuschmannMichael schrieb:</p>
<blockquote>
<p>Und noch eine Frage, wenn ich eine Constante Referenz übergebe, ist doch nur sozusagen die Speicheradresse constant, sodass man immer noch sämtliche Funktionen der Parameters ausführen kann(Also mann kann der Referenz keinen neuen Referendar zuweisen)?</p>
</blockquote>
<p>Es macht keinen Sinn, von konstanten Referenzen zu sprechen (per Definition sind Referenzen unveränderlich). Einmal gebunden, kann der Verweis nicht mehr verändert werden.</p>
<p>Du meinst Const-Referenzen, oder ausführlicher &quot;Referenzen auf const-Objekte&quot;. Das <code>const</code> bedeutet, dass du das referenzierte Objekt durch diese Referenz nicht ändern kannst. Die Referenz selbst kannst du sowieso nie ändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367569</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 24 Nov 2013 10:20:51 GMT</pubDate></item></channel></rss>