<?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[Standardkonstruktor &amp;lt;-&amp;gt; Funktionsaufruf]]></title><description><![CDATA[<p>Dieser Code ist falsch (für die Absicht, den Standardkonstruktur aufzurufen), weil er eine Funktion definiert:</p>
<pre><code class="language-cpp">CTest test1();
</code></pre>
<p>Dieser Code funktioniert aber:</p>
<pre><code class="language-cpp">CTest test1 = CTest();
</code></pre>
<p>...warum? Es wird ein (temporäres?) Objekt CTest erzeugt und test1 zugewiesen (erfordert einen Kopierkonstruktor?) , aber eigentlich könnte hier CTest doch auch eine Funktion sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204987/standardkonstruktor-lt-gt-funktionsaufruf</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 00:31:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204987.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 09 Feb 2008 00:15:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Standardkonstruktor &amp;lt;-&amp;gt; Funktionsaufruf on Sat, 09 Feb 2008 00:15:53 GMT]]></title><description><![CDATA[<p>Dieser Code ist falsch (für die Absicht, den Standardkonstruktur aufzurufen), weil er eine Funktion definiert:</p>
<pre><code class="language-cpp">CTest test1();
</code></pre>
<p>Dieser Code funktioniert aber:</p>
<pre><code class="language-cpp">CTest test1 = CTest();
</code></pre>
<p>...warum? Es wird ein (temporäres?) Objekt CTest erzeugt und test1 zugewiesen (erfordert einen Kopierkonstruktor?) , aber eigentlich könnte hier CTest doch auch eine Funktion sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1452350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1452350</guid><dc:creator><![CDATA[anfänger93]]></dc:creator><pubDate>Sat, 09 Feb 2008 00:15:53 GMT</pubDate></item><item><title><![CDATA[Reply to Standardkonstruktor &amp;lt;-&amp;gt; Funktionsaufruf on Sat, 09 Feb 2008 00:31:05 GMT]]></title><description><![CDATA[<p>Also Koperikonstruktor brauchst du vor allem, wenn du mit Zeiger arbeitest.<br />
Hier nicht (unbedingt).</p>
<p>Und ja CTest () könnte eine Funktion sein, aber da würde dein Compiler mekern, dass es da ein Problem mitdem Namen gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1452353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1452353</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 09 Feb 2008 00:31:05 GMT</pubDate></item><item><title><![CDATA[Reply to Standardkonstruktor &amp;lt;-&amp;gt; Funktionsaufruf on Sat, 09 Feb 2008 01:14:39 GMT]]></title><description><![CDATA[<p>Wenn du dir deinen Kopierkonstruktor nicht selber schreibst, dann wird eine &quot;flache&quot; Kopie durchgeführt. Bei einer solchen Kopie, werden die selben Adressen, welche die Zeiger (wenn vorhanden) des zu kopierenden Objekts beinhalten, an die Pointer des anderen Elements übergeben. Hierbei können z.B. Fehler auftreten, wenn der &quot;Destruktor&quot; von beiden Objekten aufgerufen wird, und eine Adresse gelöscht werden soll, welche schon zuvor vom anderen Objekt gelöscht wurde.<br />
Mit einem selbstgeschriebene Kopierkonstruktor kann man dieses Problem umgehen, in dem man eine &quot;tiefe&quot; Kopie erstellt. Das bedeutet, das man nicht die gleichen Adressen übergibt, sondern für die Zeiger, aus dem Objekt in das man reinkopiert, neuen Speicher reserviert, und dann nur die Werte der Zeiger, aus dem Objekt aus welchem man kopiert, übergibt.</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1452362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1452362</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sat, 09 Feb 2008 01:14:39 GMT</pubDate></item><item><title><![CDATA[Reply to Standardkonstruktor &amp;lt;-&amp;gt; Funktionsaufruf on Sat, 09 Feb 2008 13:34:50 GMT]]></title><description><![CDATA[<p>anfänger93 schrieb:</p>
<blockquote>
<p>Dieser Code ist falsch (für die Absicht, den Standardkonstruktur aufzurufen), weil er eine Funktion definiert:</p>
<pre><code class="language-cpp">CTest test1();
</code></pre>
<p>Dieser Code funktioniert aber:</p>
<pre><code class="language-cpp">CTest test1 = CTest();
</code></pre>
<p>...warum? Es wird ein (temporäres?) Objekt CTest erzeugt und test1 zugewiesen (erfordert einen Kopierkonstruktor?) , aber eigentlich könnte hier CTest doch auch eine Funktion sein?</p>
</blockquote>
<p>Fall 1: Eine Funktion wird durch die folgende Syntax gebildet:<br />
&lt;typ&gt; &lt;funktionsname&gt;(&lt;parameterliste&gt;)<br />
Was auch auf deinen vermeindlichen Konstruktoraufruf zutrifft. Sofern ein Objekt über einen Standardkonstruktor generiert werden soll reicht die folgende Syntax:<br />
&lt;typ&gt; &lt;variablenname&gt;;<br />
Sprich:</p>
<pre><code class="language-cpp">CTest test1;
</code></pre>
<p>Fall 2: Hier kann CTest auch eine Funktion sein, aber im gegensatz zu Fall 1 wird hier nicht von einer Deklaration ausgegangen. Zudem ist in dem Fall weder ein temporäres Objekt noch ein Zuweisungsoperator etc. zutreffend. Den du schreibst hier eine direkte Initialisierung...</p>
<p>Das kannst du auch selber austesten:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Test
{
  public:
    Test() { std::cout &lt;&lt; &quot;Test::Test()\n&quot;; }
    ~Test() { std::cout &lt;&lt; &quot;Test::~Test()\n&quot;; }
    Test(const Test&amp;) { std::cout &lt;&lt; &quot;Test::Test(const Test&amp;)\n&quot;; }
    Test&amp; operator=(const Test&amp;) { std::cout &lt;&lt; &quot;Test::operator=(const Test&amp;)\n&quot;; return *this; }
};

int main()
{
  std::cout &lt;&lt; &quot;-- Abschnitt 1a --\n&quot;;
  Test a = Test(); // Direkte initialisierung (1xKonstruktoraufruf)
  std::cout &lt;&lt; &quot;-- Abschnitt 1b --\n&quot;;
  Test a2; // Direkte initialisierung (1xKonstruktoraufruf)
  std::cout &lt;&lt; &quot;-- Abschnitt 2 --\n&quot;;
  a = Test(); // 1xKonstruktor 1xZuweisungsoperator 1xDestruktor
  std::cout &lt;&lt; &quot;-- Abschnitt 3a --\n&quot;;
  Test b = a; // 1xKopierkonstruktor
  std::cout &lt;&lt; &quot;-- Abschnitt 3b --\n&quot;;
  Test b(a); // 1xKopierkonstruktor
  std::cout &lt;&lt; &quot;-- Ende... (Destruktoraufrufe) --\n&quot;;
}
</code></pre>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1452512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1452512</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sat, 09 Feb 2008 13:34:50 GMT</pubDate></item><item><title><![CDATA[Reply to Standardkonstruktor &amp;lt;-&amp;gt; Funktionsaufruf on Tue, 12 Feb 2008 19:31:19 GMT]]></title><description><![CDATA[<p>Danke für eure Antworten!</p>
<p>asc, ich habe deinen Code ausprobiert und weiß, dass du recht hast.</p>
<p>Aber ich muss anmerken, dass in meinem Buch (C++ Primer) da etwas anderes steht:</p>
<p>S. 565 der 4. Auflage</p>
<blockquote>
<p>string empty_copy = string (); // Kopierinitialisierung<br />
string empty_direct; //Direktinitialisierung<br />
[...]Die Initialisierung von empty_copy und empty_direct verwendet jeweils den string-Standardkonstruktor. Im ersten Fall legt der Standardkonstruktor ein temporäres Objekt an, das dann vom Kopierkonstruktor genutzt wird, um empty_copy zu initialisieren. Im zweiten Fall wird der Standardkonsturktor direkt auf empty_direct ausgeführt.</p>
</blockquote>
<p>Das kann ich mir also mit Rotstift rausstreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1454669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1454669</guid><dc:creator><![CDATA[anfänger93]]></dc:creator><pubDate>Tue, 12 Feb 2008 19:31:19 GMT</pubDate></item><item><title><![CDATA[Reply to Standardkonstruktor &amp;lt;-&amp;gt; Funktionsaufruf on Tue, 12 Feb 2008 19:38:53 GMT]]></title><description><![CDATA[<p>ja. und mit C++0x wird die initialisierung dann einheitlich (hoffentlich) so aussehen:</p>
<pre><code class="language-cpp">CTest test1 {};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1454674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1454674</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Tue, 12 Feb 2008 19:38:53 GMT</pubDate></item></channel></rss>