<?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[constructor, copy constructor, destructor]]></title><description><![CDATA[<p>habe ein kleines Programm geschrieben, um zu testen wieviel Aufwand wenn man ohne Referenzen in Parameterlist hat.<br />
Person.hxx</p>
<pre><code>#include &lt;iostream&gt;
using namespace std;

class Person
{
public :
   Person(){
      cout&lt;&lt;&quot;call Person Ctor&quot;&lt;&lt;endl;
   }
   virtual ~Person(){
      cout&lt;&lt;&quot;call Person DCtor&quot;&lt;&lt;endl;
   }
   Person( const Person &amp; s)
   {
        cout&lt;&lt;&quot;call Person Copy Ctor&quot;&lt;&lt;endl;
   }
};
</code></pre>
<p>Student.hxx</p>
<pre><code>#include &quot;Person.hxx&quot;

class Student : public Person
{
public :
   Student(){
      cout&lt;&lt;&quot;call Student Ctor&quot;&lt;&lt;endl;
   }
   virtual ~Student(){
      cout&lt;&lt;&quot;call Student DCtor&quot;&lt;&lt;endl;
   }
   Student( const Student  &amp;s)
   {
        cout&lt;&lt;&quot;call Student Copy Ctor&quot;&lt;&lt;endl;
   }
};
</code></pre>
<pre><code>main.cpp
#include &quot;Student.hxx&quot;

Student showStudent(Student a)
{
    return a;
}
void main()
{
   Student aStudent;
  Student b =  showStudent(aStudent);
   cin.get();
}
</code></pre>
<p>Das Ergebnis:</p>
<pre><code>call Person Ctor     //erzeugen aStudent
call Student Ctor    //erzeugen aStudent
call Person Ctor     //erzeugen a
call Student Copy Ctor //Student a = aStudent
call Person Ctor       //return a
call Student Copy Ctor //Student b = a
call Student DCtor     //delete a
call Person DCtor      //delete Base &quot;von a&quot;

call Student DCtor    //delete b
call Person DCtor     //delete Base &quot;von b&quot;
call Student DCtor    //delete aStudent
call Person DCtor     //delete Base von &quot;aStudent&quot;
</code></pre>
<p>Aber bei Student a = aStudent, wird nur Copy Ctor aufgerufen? wieso nicht Constructor von Person dann von Student?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/137047/constructor-copy-constructor-destructor</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 16:38:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/137047.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Feb 2006 22:43:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to constructor, copy constructor, destructor on Tue, 14 Feb 2006 22:47:18 GMT]]></title><description><![CDATA[<p>habe ein kleines Programm geschrieben, um zu testen wieviel Aufwand wenn man ohne Referenzen in Parameterlist hat.<br />
Person.hxx</p>
<pre><code>#include &lt;iostream&gt;
using namespace std;

class Person
{
public :
   Person(){
      cout&lt;&lt;&quot;call Person Ctor&quot;&lt;&lt;endl;
   }
   virtual ~Person(){
      cout&lt;&lt;&quot;call Person DCtor&quot;&lt;&lt;endl;
   }
   Person( const Person &amp; s)
   {
        cout&lt;&lt;&quot;call Person Copy Ctor&quot;&lt;&lt;endl;
   }
};
</code></pre>
<p>Student.hxx</p>
<pre><code>#include &quot;Person.hxx&quot;

class Student : public Person
{
public :
   Student(){
      cout&lt;&lt;&quot;call Student Ctor&quot;&lt;&lt;endl;
   }
   virtual ~Student(){
      cout&lt;&lt;&quot;call Student DCtor&quot;&lt;&lt;endl;
   }
   Student( const Student  &amp;s)
   {
        cout&lt;&lt;&quot;call Student Copy Ctor&quot;&lt;&lt;endl;
   }
};
</code></pre>
<pre><code>main.cpp
#include &quot;Student.hxx&quot;

Student showStudent(Student a)
{
    return a;
}
void main()
{
   Student aStudent;
  Student b =  showStudent(aStudent);
   cin.get();
}
</code></pre>
<p>Das Ergebnis:</p>
<pre><code>call Person Ctor     //erzeugen aStudent
call Student Ctor    //erzeugen aStudent
call Person Ctor     //erzeugen a
call Student Copy Ctor //Student a = aStudent
call Person Ctor       //return a
call Student Copy Ctor //Student b = a
call Student DCtor     //delete a
call Person DCtor      //delete Base &quot;von a&quot;

call Student DCtor    //delete b
call Person DCtor     //delete Base &quot;von b&quot;
call Student DCtor    //delete aStudent
call Person DCtor     //delete Base von &quot;aStudent&quot;
</code></pre>
<p>Aber bei Student a = aStudent, wird nur Copy Ctor aufgerufen? wieso nicht Constructor von Person dann von Student?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994428</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Tue, 14 Feb 2006 22:47:18 GMT</pubDate></item><item><title><![CDATA[Reply to constructor, copy constructor, destructor on Wed, 15 Feb 2006 07:08:19 GMT]]></title><description><![CDATA[<p>Hallo,<br />
der Copy Ctor spielt in deinem Programm nur beim Funktionsaufruf von showStudent und bei dem Rückgabewert eine Rolle. Danach kommt allerdings der Zuweisungsoperator ins Spiel (das '='), welcher bei deinen Klassen nicht überladen<br />
ist und du deshalb auch keine Ausgabe erhalten kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994472</guid><dc:creator><![CDATA[Nocternity]]></dc:creator><pubDate>Wed, 15 Feb 2006 07:08:19 GMT</pubDate></item><item><title><![CDATA[Reply to constructor, copy constructor, destructor on Wed, 15 Feb 2006 07:24:28 GMT]]></title><description><![CDATA[<p>netrobot schrieb:</p>
<blockquote>
<p>Aber bei Student a = aStudent, wird nur Copy Ctor aufgerufen? wieso nicht Constructor von Person dann von Student?</p>
</blockquote>
<p>Um <strong>ein</strong> Objekt zu konstruieren, benötigst du <strong>einen</strong> Ctor-Aufruf (mal abgesehen von den indirekten Aufrufen zum Aufbau der Teilobjekte (Basis/Member). D.h. das Objekt wird <strong>entweder</strong> per Copy-Ctor, Default-Ctor oder eigenen Ctor erzeugt und ist dann komplett.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994479</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 15 Feb 2006 07:24:28 GMT</pubDate></item><item><title><![CDATA[Reply to constructor, copy constructor, destructor on Wed, 15 Feb 2006 11:06:39 GMT]]></title><description><![CDATA[<p>Nocternity schrieb:</p>
<blockquote>
<p>Hallo,<br />
der Copy Ctor spielt in deinem Programm nur beim Funktionsaufruf von showStudent und bei dem Rückgabewert eine Rolle. Danach kommt allerdings der Zuweisungsoperator ins Spiel (das '='), welcher bei deinen Klassen nicht überladen<br />
ist und du deshalb auch keine Ausgabe erhalten kannst.</p>
</blockquote>
<p>Ein Zuweisungsoperator wird hier niergends aufgerufen. X x = y; ruft keinen Zuweisungsop auf. Auch wenn hier ein =-Zeichen steht. Siehe dazu:<br />
<a href="http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=copyvsdirect#Answ" rel="nofollow">http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=copyvsdirect#Answ</a></p>
<blockquote>
<p>Aber bei Student a = aStudent, wird nur Copy Ctor aufgerufen? wieso nicht Constructor von Person dann von Student?</p>
</blockquote>
<p>Hier wird der Copy-Ctor von Student aufgerufen, welcher, da du ihn so implementiert hast, den Standard-Ctor von Person aufruft.<br />
Die Ausgabe für Student a = aStudent sollte also sein:<br />
call Person Ctor<br />
class Student Copy Ctor</p>
<p>Besser wäre es, wenn du den Copy-Ctor von Student so implementieren würdest:</p>
<pre><code class="language-cpp">Student( const Student  &amp;s)
    : Person(s)
{
    cout&lt;&lt;&quot;call Student Copy Ctor&quot;&lt;&lt;endl;
}
</code></pre>
<p>So verhält er sich dann auch wie ein automatisch generierter. Er ruft als den Copy-Ctor der Basisklasse auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994671</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Wed, 15 Feb 2006 11:06:39 GMT</pubDate></item><item><title><![CDATA[Reply to constructor, copy constructor, destructor on Wed, 15 Feb 2006 11:41:52 GMT]]></title><description><![CDATA[<blockquote>
<p>Student( const Student &amp;s)<br />
: Person(s)<br />
{<br />
cout&lt;&lt;&quot;call Student Copy Ctor&quot;&lt;&lt;endl;<br />
}</p>
</blockquote>
<p>ja, das ist besser, es ruft zwar einen CTor mehr(copy CTor von Person),aber danach a und aStudent sind völlig identisch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994705</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Wed, 15 Feb 2006 11:41:52 GMT</pubDate></item><item><title><![CDATA[Reply to constructor, copy constructor, destructor on Wed, 15 Feb 2006 11:45:07 GMT]]></title><description><![CDATA[<p>netrobot schrieb:</p>
<blockquote>
<p>ja, das ist besser, es ruft zwar einen CTor mehr(copy CTor von Person),aber danach a und aStudent sind völlig identisch</p>
</blockquote>
<p>Wieso &quot;mehr&quot;? Diese Variante ruft lediglich einen anderen Ctor von Person auf als der aus deinem ursprünglichen Beispiel (statt des Default-Ctors den Copy-Ctor).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994709</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 15 Feb 2006 11:45:07 GMT</pubDate></item><item><title><![CDATA[Reply to constructor, copy constructor, destructor on Wed, 15 Feb 2006 11:45:19 GMT]]></title><description><![CDATA[<p>die beiden sind vom aussehen her also identisch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994710</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Wed, 15 Feb 2006 11:45:19 GMT</pubDate></item><item><title><![CDATA[Reply to constructor, copy constructor, destructor on Wed, 15 Feb 2006 11:48:13 GMT]]></title><description><![CDATA[<p>netrobot schrieb:</p>
<blockquote>
<p>die beiden sind vom aussehen her also identisch...</p>
</blockquote>
<p>Ja <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="🙂"
    /><br />
(genau genommen ist Copy-Ctor nur eine Sonderbezeichnung für <em>den</em> Parameter-Ctor, der mit einem einzelnen &quot;const 'eigene_klasse'&amp;&quot; aufgerufen werden kann)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994713</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 15 Feb 2006 11:48:13 GMT</pubDate></item><item><title><![CDATA[Reply to constructor, copy constructor, destructor on Wed, 15 Feb 2006 11:57:49 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>netrobot schrieb:</p>
<blockquote>
<p>ja, das ist besser, es ruft zwar einen CTor mehr(copy CTor von Person),aber danach a und aStudent sind völlig identisch</p>
</blockquote>
<p>Wieso &quot;mehr&quot;? Diese Variante ruft lediglich einen anderen Ctor von Person auf als der aus deinem ursprünglichen Beispiel (statt des Default-Ctors den Copy-Ctor).</p>
</blockquote>
<p>nehmen wir an, in Ctor von Student schreibe ich nicht :Person(s)<br />
bei</p>
<pre><code>Student a = aStudent
</code></pre>
<p>aStudent hat 2 Teile, der 1. von Person; der 2. von Student selber, falls der 1. Teil in aStudent was geändert wurde,</p>
<pre><code>Student a = aStudent
</code></pre>
<p>a hat nur den originalen Person-Teil, d.h. a und aStudent sind nicht identisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994722</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Wed, 15 Feb 2006 11:57:49 GMT</pubDate></item><item><title><![CDATA[Reply to constructor, copy constructor, destructor on Wed, 15 Feb 2006 12:02:29 GMT]]></title><description><![CDATA[<p>Deswegen ruft der Copy-Ctor von Student trotzdem <strong>genau einen</strong> Ctor von Person auf (wenn du es richtig gemacht hast, deren Copy-Ctor, wenn du dort nichts angibst, den Default-Ctor (das ist der ohne Parameter)) - aus deiner Sicht allerdings den falschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994727</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 15 Feb 2006 12:02:29 GMT</pubDate></item></channel></rss>