<?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[Kopierkonstruktor und Clone Methode]]></title><description><![CDATA[<p>Ich hab gerade eine Übung aus meinem Buch gemacht, und es geht gerade um Clone Methoden. Das heißt doch, wenn man jetzt ein Mammal Objekt hat das aus nem Mammal Objekt und nem Dog Objekt besteht:</p>
<pre><code class="language-cpp">Mammal *Objekt=new Dog;
</code></pre>
<p>dann kann man nicht so einfach eine tiefe Kopie vornehmen, da nur der Kopierkonstruktor von Mammal aufgerufen werden würde, und es nicht weiter bis zum Kopierkonsturktor von Dog gehen würde da man Kopierkonstruktor, und Konstruktor allgemein nicht als virtuell deklarieren kann? Stimmt doch so weit oder?<br />
Deshalb macht man sich eine Clone Methode und die kopiert den Dog Teil in das Dog Mammal Objekt:</p>
<pre><code class="language-cpp">Mammal * Clone() const {return new Dog (*this);}
</code></pre>
<p>und die Clone MEthode kann man ja virtuell machen, und somit gehts auch weiter bis zum Dog Objekt...<br />
Und wenn man das ganze nicht machen würde dann würden beide Objekte am Schluss die gleiche Adress haben, und das ist ja BÖÖÖÖSE!</p>
<pre><code class="language-cpp">Mammal *ptr=new Dog(12,60);
Mammal *test;
test=ptr;
</code></pre>
<p>Also so irgendwie stell ich mir das vor, hier mal der Code zu dem was ich jetzt die ganze Zeit gelabbert hab:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Mammal
{
    public:
    Mammal(int pAge);
    Mammal(const Mammal &amp;rhs);
    virtual ~Mammal();
    int GetAge() const {return *Age;}
    void SetAge(int change) {*Age=change;}
    virtual void Speak() const {cout &lt;&lt; &quot;Tier spricht\n&quot;;}
    virtual Mammal * Clone() const {return new Mammal(*this);}

    private:
    int *Age;
};

Mammal::Mammal(int pAge)
{
    Age=new int;
    *Age=pAge;
}

Mammal::Mammal(const Mammal &amp;rhs)
{
    cout &lt;&lt; &quot;Kopierkonstruktor MAMMAL\n&quot;;
    Age=new int;
    *Age=rhs.GetAge();
}

Mammal::~Mammal()
{
    delete Age;
}

class Dog : public Mammal
{
    public:
    Dog(int pAge, int base_class_pAge);
    Dog(const Dog &amp;rhs);
    ~Dog();
    int GetAge() const {return *Age;}
    void SetAge(int change) {*Age=change;}
    void Speak() const {cout &lt;&lt; &quot;Hund bellt\n&quot;;}
    Mammal * Clone() const {return new Dog (*this);}

    private:
    int *Age;
};

Dog::Dog(int pAge, int base_class_pAge)
:Mammal(base_class_pAge)
{
    Age=new int;
    *Age=pAge;
}

Dog::Dog(const Dog &amp;rhs)
:Mammal(rhs)
{
    cout &lt;&lt; &quot;Kopierkonstruktor DOG\n&quot;;
    Age=new int;
    *Age=rhs.GetAge();
}

Dog::~Dog()
{
    delete Age;
}

int main()
{

    Mammal *ptr=new Dog(12,60);
    Mammal *test;
    test=(ptr-&gt;Clone());
    cout &lt;&lt; ptr-&gt;GetAge() &lt;&lt; endl;
    cout &lt;&lt; test-&gt;GetAge() &lt;&lt; endl;
    ptr-&gt;SetAge(333);
    cout &lt;&lt; ptr-&gt;GetAge() &lt;&lt; endl;
    cout &lt;&lt; test-&gt;GetAge() &lt;&lt; endl;

    return 0;
}
</code></pre>
<p>Nun stellt sich mir nur noch die Frage, warum wird eigentlich der Kopierkonstruktor aufgerufen. Also von Mammal und von Dog....ich hab die die Clone Methode, die macht doch alles für mich oder? Was will der Kopierkonstruktor von mir?<br />
Also irgendwie hab ichs nur so halb gechekt, ich weiß jetzt zwar wie ichs anwenden soll, aber irgendwie noch nicht ganz genau wies funktioniert, und das ist ja des wichtigste.<br />
Also wenn jemadn weiß was ich meine und des checkt, dann wärs nett wenn ers mir nochmal verdeutliche könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/185687/kopierkonstruktor-und-clone-methode</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 14:56:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/185687.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 29 Jun 2007 19:16:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Fri, 29 Jun 2007 19:16:53 GMT]]></title><description><![CDATA[<p>Ich hab gerade eine Übung aus meinem Buch gemacht, und es geht gerade um Clone Methoden. Das heißt doch, wenn man jetzt ein Mammal Objekt hat das aus nem Mammal Objekt und nem Dog Objekt besteht:</p>
<pre><code class="language-cpp">Mammal *Objekt=new Dog;
</code></pre>
<p>dann kann man nicht so einfach eine tiefe Kopie vornehmen, da nur der Kopierkonstruktor von Mammal aufgerufen werden würde, und es nicht weiter bis zum Kopierkonsturktor von Dog gehen würde da man Kopierkonstruktor, und Konstruktor allgemein nicht als virtuell deklarieren kann? Stimmt doch so weit oder?<br />
Deshalb macht man sich eine Clone Methode und die kopiert den Dog Teil in das Dog Mammal Objekt:</p>
<pre><code class="language-cpp">Mammal * Clone() const {return new Dog (*this);}
</code></pre>
<p>und die Clone MEthode kann man ja virtuell machen, und somit gehts auch weiter bis zum Dog Objekt...<br />
Und wenn man das ganze nicht machen würde dann würden beide Objekte am Schluss die gleiche Adress haben, und das ist ja BÖÖÖÖSE!</p>
<pre><code class="language-cpp">Mammal *ptr=new Dog(12,60);
Mammal *test;
test=ptr;
</code></pre>
<p>Also so irgendwie stell ich mir das vor, hier mal der Code zu dem was ich jetzt die ganze Zeit gelabbert hab:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Mammal
{
    public:
    Mammal(int pAge);
    Mammal(const Mammal &amp;rhs);
    virtual ~Mammal();
    int GetAge() const {return *Age;}
    void SetAge(int change) {*Age=change;}
    virtual void Speak() const {cout &lt;&lt; &quot;Tier spricht\n&quot;;}
    virtual Mammal * Clone() const {return new Mammal(*this);}

    private:
    int *Age;
};

Mammal::Mammal(int pAge)
{
    Age=new int;
    *Age=pAge;
}

Mammal::Mammal(const Mammal &amp;rhs)
{
    cout &lt;&lt; &quot;Kopierkonstruktor MAMMAL\n&quot;;
    Age=new int;
    *Age=rhs.GetAge();
}

Mammal::~Mammal()
{
    delete Age;
}

class Dog : public Mammal
{
    public:
    Dog(int pAge, int base_class_pAge);
    Dog(const Dog &amp;rhs);
    ~Dog();
    int GetAge() const {return *Age;}
    void SetAge(int change) {*Age=change;}
    void Speak() const {cout &lt;&lt; &quot;Hund bellt\n&quot;;}
    Mammal * Clone() const {return new Dog (*this);}

    private:
    int *Age;
};

Dog::Dog(int pAge, int base_class_pAge)
:Mammal(base_class_pAge)
{
    Age=new int;
    *Age=pAge;
}

Dog::Dog(const Dog &amp;rhs)
:Mammal(rhs)
{
    cout &lt;&lt; &quot;Kopierkonstruktor DOG\n&quot;;
    Age=new int;
    *Age=rhs.GetAge();
}

Dog::~Dog()
{
    delete Age;
}

int main()
{

    Mammal *ptr=new Dog(12,60);
    Mammal *test;
    test=(ptr-&gt;Clone());
    cout &lt;&lt; ptr-&gt;GetAge() &lt;&lt; endl;
    cout &lt;&lt; test-&gt;GetAge() &lt;&lt; endl;
    ptr-&gt;SetAge(333);
    cout &lt;&lt; ptr-&gt;GetAge() &lt;&lt; endl;
    cout &lt;&lt; test-&gt;GetAge() &lt;&lt; endl;

    return 0;
}
</code></pre>
<p>Nun stellt sich mir nur noch die Frage, warum wird eigentlich der Kopierkonstruktor aufgerufen. Also von Mammal und von Dog....ich hab die die Clone Methode, die macht doch alles für mich oder? Was will der Kopierkonstruktor von mir?<br />
Also irgendwie hab ichs nur so halb gechekt, ich weiß jetzt zwar wie ichs anwenden soll, aber irgendwie noch nicht ganz genau wies funktioniert, und das ist ja des wichtigste.<br />
Also wenn jemadn weiß was ich meine und des checkt, dann wärs nett wenn ers mir nochmal verdeutliche könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315261</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Fri, 29 Jun 2007 19:16:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Fri, 29 Jun 2007 19:42:07 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Mammal * Clone() const {return new Dog (*this);}
</code></pre>
<p>hier wird der kopierkonstruktor ( <code>new Dog(*this);</code> ) aufgerufen.</p>
<p>im übrigens sollte diese funktion auch ein Dog* zurückgeben:</p>
<pre><code class="language-cpp">Dog* Clone() const {return new Dog (*this);}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1315271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315271</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Fri, 29 Jun 2007 19:42:07 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Fri, 29 Jun 2007 20:44:33 GMT]]></title><description><![CDATA[<p>Mh, also ich hab halt auch den Rückgabetyp Mammal genommen weil des so in meinem Buch stand. Und ist es den nicht so das man bei virtuellen Funktionen den gleichen Rückgabetyp benötigt? Außerdem ist es doch egal, da ein Dog Objekt doch auch gleich ein Mammal Objekt ist?<br />
Bzw. wo ist den der Unterschied wenn ich Mammal anstatt Dog zurückgebe?<br />
Dankeschön schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315306</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Fri, 29 Jun 2007 20:44:33 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Fri, 29 Jun 2007 21:01:25 GMT]]></title><description><![CDATA[<p>queer_boy schrieb:</p>
<blockquote>
<p>...<br />
im übrigens sollte diese funktion auch ein Dog* zurückgeben:</p>
<pre><code class="language-cpp">Dog* Clone() const {return new Dog (*this);}
</code></pre>
</blockquote>
<p>Dann bekommt man aber bestimmt eine Compilerwarnung um die Ohren gekloppt, weil bei einer überschriebenen Funktion der Returntyp geändert wird - das mag der Compiler nicht.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315319</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 29 Jun 2007 21:01:25 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Fri, 29 Jun 2007 21:12:43 GMT]]></title><description><![CDATA[<p>Also äh funktionieren tut bei mir beides. Wahrscheinlich hab ich auch nen &quot;schlechten&quot; Compiler (MinGW) weil da kommt bei mir keine Fehlermeldung.<br />
Kann man jetzt sagen: &quot;Es ist egal ob man 'Mammal *' oder 'Dog *' zurückgibt!&quot;?<br />
Dankeschön schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315326</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Fri, 29 Jun 2007 21:12:43 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Fri, 29 Jun 2007 21:17:21 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also ich glaube nicht, dass Dein Compiler &quot;schlecht&quot; ist, aber vielleicht hast Du nicht alle Warnings angeschaltet (-Wall oder -pedantic) ... oder verschiedene Compiler handhaben das eben unterschiedlich.</p>
<p>Ich weiß aus dem Stand auch nicht, was der Standard dazu sagt, meine aber, mich an solche Warnings (beim gcc) zu erinnern.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315331</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 29 Jun 2007 21:17:21 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Fri, 29 Jun 2007 21:21:56 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Dann bekommt man aber bestimmt eine Compilerwarnung um die Ohren gekloppt, weil bei einer überschriebenen Funktion der Returntyp geändert wird - das mag der Compiler nicht.</p>
</blockquote>
<p>Clone ist weiter oben virtuell <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>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14886">@Stromberg</a>:<br />
Wenn du in deiner Basisklasse eine virtuelle Methode hast, die einen Zeiger oder eine Refernez auf den eigenen Typ zurückgeben, dann kannst du in abgeleiten Klassen dieser virtuellen Funktion als Rückgabetyp einen Zeiger/Referenz auf die abgeleitete Klasse geben:</p>
<pre><code class="language-cpp">class A {

   public:
           virtual A&amp; func();
};

class A : public B {

   public:
           virtual B&amp; func();
           // Alles im grünen Bereich ;), das virtuell kann man aber auch hier
           // weglassen, würde ich aber trotzdem hinzuschreiben, damit man
           // sieht, dass die Funktion virtuell ist.
};
</code></pre>
<p>Das ganze nennt sich irgendwas mit Covariant-Returntyp ( *geedit* <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/1315335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315335</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 29 Jun 2007 21:21:56 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Fri, 29 Jun 2007 21:27:12 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>...<br />
Clone ist weiter oben virtuell ;)...</p>
</blockquote>
<p>Ich weiß ... aber nicht, wieso Du das sagst. <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="😕"
    /><br />
Wie würdest Du denn diesen Zusammenhang beschreiben wenn nicht mit &quot;overwrite&quot;/&quot;überschreiben&quot; ?</p>
<p>KasF schrieb:</p>
<blockquote>
<p>...Das ganze nennt sich irgendwas mit Covariant-Returntyp ( *geedit* <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 kann natürlich sein - das weißt Du dann besser als ich.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315341</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 29 Jun 2007 21:27:12 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Fri, 29 Jun 2007 21:38:00 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>aber nicht, wieso Du das sagst.</p>
</blockquote>
<p>Weil du ja geschrieben hattest, dass der Compiler hier warnen würde, was aber offiziel erlaubt ist, wenn die Funktion virtuell ist.</p>
<p>Oder habe ich dich falsch verstanden ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315348</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 29 Jun 2007 21:38:00 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Sat, 30 Jun 2007 03:39:13 GMT]]></title><description><![CDATA[<p>ja, KasF hat recht- covariant return types. und der vorteil liegt darin, dass du nicht explizit runtercasten musst, wenn du clone für ein objekt der abgeleiteten klasse aufrust.</p>
<pre><code class="language-cpp">Dog d;

Dog *x = d.clone(); //Fehler ohne covariant return type
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1315398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315398</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Sat, 30 Jun 2007 03:39:13 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Sat, 30 Jun 2007 11:23:57 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>aber nicht, wieso Du das sagst.</p>
</blockquote>
<p>Weil du ja geschrieben hattest, dass der Compiler hier warnen würde, was aber offiziel erlaubt ist, wenn die Funktion virtuell ist.</p>
<p>Oder habe ich dich falsch verstanden ?</p>
</blockquote>
<p>Jain - Mein Mißerständnis lag IMO nicht darin, dass die Funktion virtuell sei oder nicht, sondern darin, dass ich die &quot;Toleranz gegenüber covariant return types&quot; nicht kannte, sondern nur von der harten Haltung von Compilern gegenüber variieren return types wusste. <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>
<p>Also wie auch immer: queer boys Hinweis war richtig und meiner falsch. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315540</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 30 Jun 2007 11:23:57 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Sat, 24 Nov 2007 11:54:21 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class A {
   
   public:
           virtual A&amp; func();
};

class A : public B {
   
   public:
           virtual B&amp; func();
           // Alles im grünen Bereich ;), das virtuell kann man aber auch hier
           // weglassen, würde ich aber trotzdem hinzuschreiben, damit man
           // sieht, dass die Funktion virtuell ist.
};
</code></pre>
</blockquote>
<p>es ist nicht compilierbar unter VC6 sowie</p>
<pre><code class="language-cpp">virtual Dog* Clone() const {return new Dog (*this);}
</code></pre>
<p>error C2555: 'B::func' : overriding virtual function differs from 'A::func' only by return type or calling convention.<br />
hab aber kein problem unter vc7</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409285</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Sat, 24 Nov 2007 11:54:21 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Sat, 24 Nov 2007 12:01:33 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a> wenn ich jetzt gerade nicht völlig daneben liege, wird sich kein compiler darüber beschwere, da<br />
Dog* Clone()<br />
und<br />
Mammal* Clone()<br />
schlicht zwei verschiedene funktionen sind. wenn man im kind Mammal* Clone() implementiert, muss man halt nur darauf achten, dass man nie<br />
Dog* hund=Mammal::Clone() ausführt, da dann die funktion des elternobjekte aufgerufen wird, also Dog* Dog::Clone().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409293</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Sat, 24 Nov 2007 12:01:33 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Sat, 24 Nov 2007 12:04:21 GMT]]></title><description><![CDATA[<p>Was soll die Methode Clone eigentlich für einen Sinn haben? Die Bezeichner tiefe und flache Kopie finde ich auch schwachsinnig, entweder man kopiert ein Objekt oder eben nicht.<br />
Was ist der Vorteil hiervon:</p>
<pre><code class="language-cpp">Mammal* dog = new Dog();
Mammal* dog2 = dog-&gt;Clone();
</code></pre>
<p>gegenüber hiervon?</p>
<pre><code class="language-cpp">Mammal* dog = new Dog();
Mammal* dog2 = new Dog( *dog );
</code></pre>
<p>Das &quot;Clone&quot; kenne ich so nur von Java, dort hat's sicherlich auch seine Berechtigung, in C++ ist es imho aber Unsinn. Es ist völlig normal und etabliert, Kopien mit dem <em>Kopier</em>konstruktor zu erzeugen, wozu also Clone? Keep things simple as possible, oder so <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409295</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 24 Nov 2007 12:04:21 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Sat, 24 Nov 2007 12:42:28 GMT]]></title><description><![CDATA[<p>ghorst schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a> ...</p>
</blockquote>
<p>Du weißt aber schon, dass das Thema in diesem Thread schon vor fast einem halben Jahr abgeschlossen wurde, oder ? Die Antwort steht auch schon weiter oben. <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="😉"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409309</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 24 Nov 2007 12:42:28 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Sat, 24 Nov 2007 12:43:37 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@simon2</a> ich habe den nicht ausgegraben und zu meiner schande muss ich gestehen, schaute ich nicht, wann du deinen beitrag hier geschrieben hast. sollte ich aber in zukunft wieder 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/1409317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409317</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Sat, 24 Nov 2007 12:43:37 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor und Clone Methode on Sat, 24 Nov 2007 21:54:07 GMT]]></title><description><![CDATA[<p>ghorst schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@simon2</a> ich habe den nicht ausgegraben ...</p>
</blockquote>
<p>Weiß ich wohl - ist mir auch schon öfter passiert. Kein Problem !<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409579</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 24 Nov 2007 21:54:07 GMT</pubDate></item></channel></rss>