<?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[Missing clone_ptr &#x2F; value_ptr]]></title><description><![CDATA[<p>Bin ich eigentlich der einzige, dem der smart pointer fehlt, der klont?<br />
Manchmal fehlt mir einfach die Copy Semantik für einfache polymorphe Objekte.<br />
copy assignment und copy construct will ich nicht überladen und shared_ptr ist einfach die falsche Wahl, weil ich ja nicht teilen will.</p>
<p>Ich habe mir jetzt ein selbst implementiert, der fast genauso aussieht wie der unique_ptr, nur neben move auch copy erlaubt. Benötigt dafür aber eine virtuelle clone Methode. Die Notwendigkeit entstand durch eine Vererbungshierarchie und hätte ich unique_ptr verwendet, hätte sich das durch das komplette Programm durchgezogen.</p>
<p>- Wieso gibt es sowas nicht im Standard? (Außer Leute daran zu hindern, das Ding zu missbrauchen, weil sie move Semantik nicht verstanden haben :D)<br />
- Wieso finde ich nicht öfters Leute die nach sowas fragen?<br />
- Übersehe ich irgendwas, das den value_ptr völlig unnötig macht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/336596/missing-clone_ptr-value_ptr</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Apr 2026 02:03:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/336596.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Feb 2016 05:13:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Tue, 02 Feb 2016 05:13:14 GMT]]></title><description><![CDATA[<p>Bin ich eigentlich der einzige, dem der smart pointer fehlt, der klont?<br />
Manchmal fehlt mir einfach die Copy Semantik für einfache polymorphe Objekte.<br />
copy assignment und copy construct will ich nicht überladen und shared_ptr ist einfach die falsche Wahl, weil ich ja nicht teilen will.</p>
<p>Ich habe mir jetzt ein selbst implementiert, der fast genauso aussieht wie der unique_ptr, nur neben move auch copy erlaubt. Benötigt dafür aber eine virtuelle clone Methode. Die Notwendigkeit entstand durch eine Vererbungshierarchie und hätte ich unique_ptr verwendet, hätte sich das durch das komplette Programm durchgezogen.</p>
<p>- Wieso gibt es sowas nicht im Standard? (Außer Leute daran zu hindern, das Ding zu missbrauchen, weil sie move Semantik nicht verstanden haben :D)<br />
- Wieso finde ich nicht öfters Leute die nach sowas fragen?<br />
- Übersehe ich irgendwas, das den value_ptr völlig unnötig macht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485552</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Tue, 02 Feb 2016 05:13:14 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Tue, 02 Feb 2016 05:27:33 GMT]]></title><description><![CDATA[<p>5cript schrieb:</p>
<blockquote>
<p>Die Notwendigkeit entstand durch eine Vererbungshierarchie und hätte ich unique_ptr verwendet, hätte sich das durch das komplette Programm durchgezogen.</p>
</blockquote>
<p>Erklär!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485554</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 02 Feb 2016 05:27:33 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Tue, 02 Feb 2016 10:39:12 GMT]]></title><description><![CDATA[<p>Vielleicht bin ich auch nur ein bisschen kriminell in meinen Datenstrukturen.</p>
<p>Recursive struktur zur Abbildung von Markup Listen, wie man sie in Wikis findet. Namen sind leicht abgeändert.</p>
<pre><code>struct ListTextLine : public ListElement
{
    std::string data;
    // clone
};

// Ich finde es affig für sowas triviales copy assignment, copy construction
// getter und setter usw zu schreiben. Diese structs haben auch keine Methoden außer clone und damit keine Invarianz oder internal state, den ich schützen müsste.
struct List : public ListElement
{
    ListType type;
    std::vector &lt;unique_ptr &lt;ListElement&gt;&gt; elements;

    // Ups ich müsste hier die Operatoren einbauen.
};

class WikiList : public MarkupComponent
{
public:
    std::string toMarkup() override;
    ParsingResult fromMarkup(std::string const&amp; mu) override;

    // ...

private:
    List data; //&lt;- Ups ich bin plötzlich unkopierbar
};

// Somewhere in my code: Ups ich muss WikiListen hin und her schieben.
</code></pre>
<p>EDIT: Einfach durch die Benutzung meines value_ptr muss ich gar keinen weiteren code schreiben oder sonstige Ged</p>
<p>EDIT 2: Well, dadurch, dass beide eine clone methode haben, hätte ich auch die Operatoren schreiben können, bzw spätestens in WikiList <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485576</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Tue, 02 Feb 2016 10:39:12 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Tue, 02 Feb 2016 11:24:23 GMT]]></title><description><![CDATA[<p>Einfachste Lösung in dem Fall wohl: <code>std::list</code> statt <code>std::vector&lt;unique_ptr&lt;...&gt;&gt;</code> und schon wieder fertig... <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/2485585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485585</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 02 Feb 2016 11:24:23 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Tue, 02 Feb 2016 11:54:54 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>Einfachste Lösung in dem Fall wohl: <code>std::list</code> statt <code>std::vector&lt;unique_ptr&lt;...&gt;&gt;</code> und schon wieder fertig... <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>
</blockquote>
<p>Geht im gezeigten Beispiel nicht, da Polymorphie im Spiel ist und wir Pointer auf <code>ListElement</code> brauchen.</p>
<p>Zur Frage an sich: Das gleiche habe ich mich auch schonmal gefragt. Zwar hatte ich bisher noch keine Situation in der ich diese Konstruktion brauchte und habe mir daher selbst noch keine Implementation geschrieben aber warum das nicht im Standard ist frage ich mich auch. Nichtmal boost scheint sowas zu haben. Wobei ich mich gerade frage wie du das Objekt kopierst wenn du nur einen Pointer auf die Basisklasse hast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485590</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Tue, 02 Feb 2016 11:54:54 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Tue, 02 Feb 2016 12:01:54 GMT]]></title><description><![CDATA[<p>sebi707 schrieb:</p>
<blockquote>
<p>dot schrieb:</p>
<blockquote>
<p>Einfachste Lösung in dem Fall wohl: <code>std::list</code> statt <code>std::vector&lt;unique_ptr&lt;...&gt;&gt;</code> und schon wieder fertig... <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>
</blockquote>
<p>Geht im gezeigten Beispiel nicht, da Polymorphie im Spiel ist und wir Pointer auf <code>ListElement</code> brauchen.</p>
</blockquote>
<p>In dem Fall muss dein Smartpointer zum &quot;Kopieren&quot; aber irgendeine Methode einer abstrakten Klasse aufrufen, dass sich sowas nicht in einer Standardbibliothek findet, sollte jetzt keine Überraschung sein!? Wie sollte die Methode standardmäßig heißen und wieso nicht anders? Was gibt sie zurück? Wie wird das von der Methode zurückgegebene Ding wieder gelöscht? Sowas baust du dir, wenn du es wirklich brauchst (was verhältnissmäßig selten der Fall sein sollte) selbst, in einer Standardbibliothek hat sowas imo absolut nichts verloren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485592</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 02 Feb 2016 12:01:54 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Tue, 02 Feb 2016 12:19:05 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6496">@dot</a><br />
Könnte man gleich lösen wie bei <code>shared_ptr</code> der Deleter gemacht ist: Funktor der beim Erzeugen mit angegeben werden muss. Dass es das nicht gibt liegt mMn. eher daran dass man es nicht <em>so</em> oft braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485595</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 02 Feb 2016 12:19:05 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Tue, 02 Feb 2016 12:31:49 GMT]]></title><description><![CDATA[<p>man könnte natürlich auch darüber nachdenken ob im OP gezeigtem Beispiel eine std::vector die geeignet Container Klasse ist oder nicht doch durch eine eigenen Container Wrapper ersetzt werdend sollte.<br />
nachdem element_type und deleter_type vom unique_ptr bekannt sind ist das clone wenn gewollt eine freie Funktion die einmal entwickelt und dann für alle Objekte gilt die copy constructable sind,<br />
'künstliche' clone Methoden werden unnütz.<br />
Und das ist eigentlich, nach meinem Geschmack, eleganter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485596</guid><dc:creator><![CDATA[kurze_frage]]></dc:creator><pubDate>Tue, 02 Feb 2016 12:31:49 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Tue, 02 Feb 2016 12:42:34 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6496">@dot</a><br />
Könnte man gleich lösen wie bei <code>shared_ptr</code> der Deleter gemacht ist: Funktor der beim Erzeugen mit angegeben werden muss. Dass es das nicht gibt liegt mMn. eher daran dass man es nicht <em>so</em> oft braucht.</p>
</blockquote>
<p>Könnte man machen, zusätzlich zum Deleter natürlich noch eine Policy für welche Methode jetzt aufzurufen ist. Die Clone-Methode returned natürlich einen <code>std::unique_ptr</code> , denn deren Produkt muss den Besitz am Objekt mitnehmen. Der <code>clone_ptr</code> muss natürlich einen zum <code>unique_ptr</code> kompatiblen Deleter und passenden Konstruktor haben. Dann kannst du das Produkt der Clone-Methode zusammen mit dem Deleter in deinen <code>clone_ptr</code> reinmoven. Imo ist das einfach ein viel zu seltener und zu spezieller Usecase als dass ich sowas in einer Standardbibliothek würde sehen wollen, da fallen mir echt beliebig viele Dinge ein, die ich eher vermissen würde als sowas. Vor allem kann man es sich einfach in 20 Zeilen selbst basteln, wenn man es wirklich einmal haben zu müssen meint (ich könnte mich gerade nicht erinnern, wann ich solch ein Konstrukt in C++ mal wirklich gebraucht hätte)...</p>
<p>Edit: Ok, die Clone-Methode kann wohl auch einfach einen <code>clone_ptr</code> returnen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> Anyways, imo dennoch viel zu speziell als dass ich das in der Standardbibliothek vermissen würde...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485597</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 02 Feb 2016 12:42:34 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Tue, 02 Feb 2016 14:02:32 GMT]]></title><description><![CDATA[<p>Die Clone-Methode könnte auch einfach nen Raw-Pointer zurückgeben. &quot;Muss&quot; ist da gar nix, <code>new</code> liefert auch nen Raw-Pointer zurück und man kann damit arbeiten.</p>
<p>dot schrieb:</p>
<blockquote>
<p>Imo ist das einfach ein viel zu seltener und zu spezieller Usecase (...)</p>
</blockquote>
<p>Ja, sehe ich genau so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485605</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 02 Feb 2016 14:02:32 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Tue, 02 Feb 2016 14:20:13 GMT]]></title><description><![CDATA[<p>kurze_frage schrieb:</p>
<blockquote>
<p>nachdem element_type und deleter_type vom unique_ptr bekannt sind ist das clone wenn gewollt eine freie Funktion die einmal entwickelt und dann für alle Objekte gilt die copy constructable sind,<br />
'künstliche' clone Methoden werden unnütz.<br />
Und das ist eigentlich, nach meinem Geschmack, eleganter.</p>
</blockquote>
<p>Als Template-Parameter bekannt ist beim Klonen ja nur der &quot;static type&quot;. Klonen musst du aber den &quot;dynamic type&quot;.<br />
Dazu könnte man, analog dazu was <code>shared_ptr</code> für den Deleter macht, einen &quot;Default-Kloner&quot; beim Initialisieren/Resetten des <code>clone_ptr</code> erzeugen und mit abspeichern. Dieser kann den dynamischen Typ klonen, da an dieser Stelle ja der dynamische Typ bekannt ist. Bzw. den Typ der ursprünglich an den Ctor bzw. die Reset-Funktion übergeben wurde.</p>
<p>Das nächste Problem das man dabei hätte wäre dann: der Kloner kann nur <em>einen</em> Zeiger zurückgeben auf <em>einen</em> Typ <code>T</code> . Egal wie man <code>T</code> wählt, sobald man Casts unterstützen will steht man vor dem Problem dass man irgendwann nen <code>clone_ptr&lt;U&gt;</code> hat, der Kloner aber nen <code>T*</code> zurückgibt. Dummerweise ist dabei aber <code>T</code> dem <code>clone_ptr</code> nicht bekannt und <code>U</code> dem Kloner nicht bekannt. Wei also den Zeiger konvertieren?</p>
<p>Rein technisch würde ich sagen: sollte gehen. Man speichert einfach in jedem <code>clone_ptr</code> den Offset (in <code>char</code> s) zwischen dem gespeicherten Zeiger und dem originalen <code>T*</code> (mit <code>T</code> =dynamischer Typ des Objekts). Da der Kloner immer <code>T*</code> zurückgibt, kann man dann aus einem <code>clone_ptr&lt;U&gt;</code> einen weiteren <code>clone_ptr&lt;U&gt;</code> klonen, indem man einfach den Offset auf den Rückgabewert des Kloners draufrechnet. Das würde dann sogar soweit funktionieren, dass man, wenn man einen <code>clone_ptr&lt;U&gt;</code> auf das 27. <code>U</code> -Subobjekt eines <code>T</code> hat (dreaded diamond und so), und davon ausgehend klont, man als Ergebnis wieder einen <code>clone_ptr&lt;U&gt;</code> auf das 27. <code>U</code> -Subobjekt des neuen <code>T</code> bekommt.</p>
<p>Wo ich mir aber nicht so sicher bin ist ob der Standard Zeigerakrobatik dieser Art erlaubt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485607</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 02 Feb 2016 14:20:13 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Tue, 02 Feb 2016 16:01:10 GMT]]></title><description><![CDATA[<p>Ich hatte mir mal einen smart pointer für copy-on-write gebastelt ( <code>cow&lt;T&gt;</code> ), dem ich auch Laufzeit-Polymorphie beibringen wollte (T durfte abstrakt sein, wobei <code>cow&lt;Derived&gt;</code> dann in <code>cow&lt;Base&gt;</code> konvertierbar war), just for fun. Gebraucht habe ich das dann aber nie. Jedenfalls kann ich mich nicht dran erinnern, ihn tatsächlich eingesetzt zu haben. copy-on-write alleine ja. Aber nicht polymorph.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485621</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 02 Feb 2016 16:01:10 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Tue, 02 Feb 2016 16:35:14 GMT]]></title><description><![CDATA[<p>für den <code>clone_ptr</code> existiert bereits der <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3339.pdf" rel="nofollow">Vorschlag N3339</a>. Daraus ist aber anscheinend nichts geworden. Siehe noch hier <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3371.html" rel="nofollow">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3371.html</a>) .. und danach ist er verschwunden.</p>
<p>Ich habe einen <code>clone_ptr</code> bisher nie gebraucht.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485623</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 02 Feb 2016 16:35:14 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Wed, 03 Feb 2016 07:07:14 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>für den <code>clone_ptr</code> existiert bereits der <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3339.pdf" rel="nofollow">Vorschlag N3339</a>. Daraus ist aber anscheinend nichts geworden. Siehe noch hier <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3371.html" rel="nofollow">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3371.html</a>) .. und danach ist er verschwunden.</p>
<p>Ich habe einen <code>clone_ptr</code> bisher nie gebraucht.</p>
<p>Gruß<br />
Werner</p>
</blockquote>
<p>vielleicht ist der ja deswegen wieder verschwunden weil offensichtlich ist das wenn man value objects will soche auch verwenden sollte und auf dem heap herum kugelnde Objekte zum clonen doch sehr javaresk sind</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485685</guid><dc:creator><![CDATA[kurze_frage]]></dc:creator><pubDate>Wed, 03 Feb 2016 07:07:14 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Wed, 03 Feb 2016 11:14:14 GMT]]></title><description><![CDATA[<p>Was aber nicht immer möglich ist. Hier ging es ja ganze Zeit um Polymorpie. Aber auch ohne kann es Sinn machen. Z.B. bei Datenstrukturen wie Linked Lists oder Bäumen. Wenn man die mit so einem <code>value_ptr</code> aufbauen würde braucht man sich nicht mehr um Copy Constructor kümmern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485701</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Wed, 03 Feb 2016 11:14:14 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Wed, 03 Feb 2016 11:22:30 GMT]]></title><description><![CDATA[<p>sebi707 schrieb:</p>
<blockquote>
<p>Aber auch ohne kann es Sinn machen. Z.B. bei Datenstrukturen wie Linked Lists oder Bäumen. Wenn man die mit so einem <code>value_ptr</code> aufbauen würde braucht man sich nicht mehr um Copy Constructor kümmern.</p>
</blockquote>
<p>Sehe nicht, wofür man dort einen solchen &quot; <code>value_ptr</code> &quot; brauchen würde. Was genau macht der, was ein <code>unique_ptr</code> dort nicht machen nicht kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485704</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 03 Feb 2016 11:22:30 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Wed, 03 Feb 2016 11:25:59 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6496">@dot</a><br />
Den <code>value_ptr</code> bzw. <code>clone_ptr</code> brauchst du wenn du Value-Semantik mit Polymorphie kombinieren willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485706</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 03 Feb 2016 11:25:59 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Wed, 03 Feb 2016 11:27:15 GMT]]></title><description><![CDATA[<p>Ist mir schon klar, nur angeblich soll der jetzt auch ohne Polymorphie was bringen und das versteh ich grad nicht!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485707</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 03 Feb 2016 11:27:15 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Wed, 03 Feb 2016 11:31:58 GMT]]></title><description><![CDATA[<p>Das hat er doch gerade geschrieben, du musst den Copy-Ctor nicht implementieren.<br />
Statt</p>
<pre><code class="language-cpp">Foo::Foo(Foo const&amp; other)
{
    if (other.m_left)
        m_left.reset(other.m_left-&gt;clone());
    if (other.m_right)
        m_right.reset(other.m_right-&gt;clone());
}
</code></pre>
<p>schreibst du einfach ... nix.<br />
Nix schreiben ist einfacher. Und weniger fehleranfällig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485709</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 03 Feb 2016 11:31:58 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Wed, 03 Feb 2016 11:43:52 GMT]]></title><description><![CDATA[<p>Naja großartig, dann hast du deinen Copy C'tor halt <code>clone()</code> genannt, implementieren musst du es trozdem. Ich ging davon aus, dass es selbstverständlich ist, dass man, wenn man schon meint, so ein <code>clone()</code> Teil haben zu müssen, den Copy C'tor private oder protected implementiert (oder defaulted) und dann</p>
<pre><code class="language-cpp">auto clone() const { return std::make_unique&lt;Blub&gt;(*this); }
</code></pre>
<p>macht, weil wieso würde man irgendwas anderes machen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485711</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 03 Feb 2016 11:43:52 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Wed, 03 Feb 2016 11:56:46 GMT]]></title><description><![CDATA[<p>Nein du brauchst auch keine clone Funktion. Alle Membervariablen werden durch den Aufruf ihres Copy Constructors kopiert und der <code>value_ptr</code> implementiert diesen eben so, dass nicht die Adresse kopiert wird sondern tatsächlich die Daten. Wobei wir ja schon diskutiert haben das dieser Kopiervorgang für polymorphe Objekte nicht so einfach ist. Ohne Polymorpie ist das allerdings trivial.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485715</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Wed, 03 Feb 2016 11:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Wed, 03 Feb 2016 12:09:24 GMT]]></title><description><![CDATA[<p>Dafür brauch ich aber keinen <code>value_ptr</code> weil der Copy C'tor macht das doch schon!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485717</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 03 Feb 2016 12:09:24 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Wed, 03 Feb 2016 12:15:54 GMT]]></title><description><![CDATA[<p>Aber falsch. Wenn du Raw Pointer benutzt kopiert er nur die Adressen und wenn du <code>unique_ptr</code> benutzt gibts gar keinen Default Copy Constructor weil <code>unique_ptr</code> Move only ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485718</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Wed, 03 Feb 2016 12:15:54 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Wed, 03 Feb 2016 13:09:58 GMT]]></title><description><![CDATA[<p>nach dem ansehen von 'inheritance is the base class of evil' bin ich der Meinung das ich bis dahin immer viel zu viel polymorphe Objekte gebaut habe und deswegen alles so kompliziert wurde. Sean Parent legt da einfach seine value Objekte von unterschiedlichen Typen in den Container, sehr fesch die Methode!</p>
<p>Ansonst, mit nur einem Pointer auf die Base Klasse wird ohne weitere Info auch ein value_ptr Probleme haben irgendetwas brachbar zu kopieren, von selber geht da also nix.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485722</guid><dc:creator><![CDATA[kurze_frage]]></dc:creator><pubDate>Wed, 03 Feb 2016 13:09:58 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Wed, 03 Feb 2016 14:04:55 GMT]]></title><description><![CDATA[<p>sebi707 schrieb:</p>
<blockquote>
<p>Aber falsch. Wenn du Raw Pointer benutzt kopiert er nur die Adressen und wenn du <code>unique_ptr</code> benutzt gibts gar keinen Default Copy Constructor weil <code>unique_ptr</code> Move only ist.</p>
</blockquote>
<p>Die Frage ist, wieso willst du &quot;Pointer kopieren&quot;? Wenn dein Typ Wertsemantik hat und du besitzende Zeiger drauf hast, hast du sehr wahrscheinlich was falsch gemacht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485734</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 03 Feb 2016 14:04:55 GMT</pubDate></item><item><title><![CDATA[Reply to Missing clone_ptr &#x2F; value_ptr on Wed, 03 Feb 2016 14:05:00 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>Naja großartig, dann hast du deinen Copy C'tor halt <code>clone()</code> genannt, implementieren musst du es trozdem. Ich ging davon aus, dass es selbstverständlich ist, dass man, wenn man schon meint, so ein <code>clone()</code> Teil haben zu müssen, den Copy C'tor private oder protected implementiert (oder defaulted) und dann</p>
<pre><code class="language-cpp">auto clone() const { return std::make_unique&lt;Blub&gt;(*this); }
</code></pre>
<p>macht, weil wieso würde man irgendwas anderes machen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Das wurde doch schon alles diskutiert: es sollte möglich sein dass der <code>value_ptr</code> den normalen Copy-Ctor verwendet.</p>
<p>dot schrieb:</p>
<blockquote>
<p>Dafür brauch ich aber keinen <code>value_ptr</code> weil der Copy C'tor macht das doch schon!?</p>
</blockquote>
<p>Wenn du mir zeigst wie du nen Baum oder ne verkettete Liste ohne Zeiger aufbaust...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485735</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 03 Feb 2016 14:05:00 GMT</pubDate></item></channel></rss>