<?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[Copy Constructor]]></title><description><![CDATA[<p>huhu leute,<br />
hab eine kurze, knackige Frage.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Foo
{
    private:
        int i;

    public:
        Foo() : i(0)
        {
            cout &lt;&lt; endl &lt;&lt; &quot;STD&quot; &lt;&lt; endl;
        }

        Foo(const Foo&amp; ori)
        {
            this-&gt;i = ori.i;
            cout &lt;&lt; endl &lt;&lt; &quot;COPY&quot; &lt;&lt; endl;
        }

};

Foo fkt()
{
    Foo tmp;
    return tmp;
}

int main()
{
    /* Warum wird bei der Erzeugung von test kein Copy-Constructor aufgerufen,
         bzw. warum wird hier gar kein Constructor aufgerufen ??
    */
    Foo test = fkt();

    system(&quot;pause&gt;nul&quot;);
    return 0;
}
</code></pre>
<p>danke euch schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/254023/copy-constructor</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 04:20:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/254023.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Nov 2009 16:17:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Copy Constructor on Tue, 10 Nov 2009 16:17:12 GMT]]></title><description><![CDATA[<p>huhu leute,<br />
hab eine kurze, knackige Frage.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Foo
{
    private:
        int i;

    public:
        Foo() : i(0)
        {
            cout &lt;&lt; endl &lt;&lt; &quot;STD&quot; &lt;&lt; endl;
        }

        Foo(const Foo&amp; ori)
        {
            this-&gt;i = ori.i;
            cout &lt;&lt; endl &lt;&lt; &quot;COPY&quot; &lt;&lt; endl;
        }

};

Foo fkt()
{
    Foo tmp;
    return tmp;
}

int main()
{
    /* Warum wird bei der Erzeugung von test kein Copy-Constructor aufgerufen,
         bzw. warum wird hier gar kein Constructor aufgerufen ??
    */
    Foo test = fkt();

    system(&quot;pause&gt;nul&quot;);
    return 0;
}
</code></pre>
<p>danke euch schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806113</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 10 Nov 2009 16:17:12 GMT</pubDate></item><item><title><![CDATA[Reply to Copy Constructor on Tue, 10 Nov 2009 16:26:54 GMT]]></title><description><![CDATA[<p>also der copy-ctor muss nicht aufgerufen werden(die kopier kann der compiler wegoptimieren, wenn du ihm das erlaubst).</p>
<p>der std-ctor sollte aber zumindest aufgerufen werden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806118</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 10 Nov 2009 16:26:54 GMT</pubDate></item><item><title><![CDATA[Reply to Copy Constructor on Tue, 10 Nov 2009 16:30:30 GMT]]></title><description><![CDATA[<p>mit wegoptimieren meinst du, bevor der Compiler das lokale Objekt kopiert und dann löscht und dann das kopierte Objekt verwendet,<br />
kann er gleich das lokale Objekt nehmen und spart sich das kopieren dann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806121</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 10 Nov 2009 16:30:30 GMT</pubDate></item><item><title><![CDATA[Reply to Copy Constructor on Tue, 10 Nov 2009 16:40:46 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>der std-ctor sollte aber zumindest aufgerufen werden...</p>
</blockquote>
<p>Möglicherweise wurde das Objekt ganz wegoptimiert, weil nichts damit gemacht wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806127</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 10 Nov 2009 16:40:46 GMT</pubDate></item><item><title><![CDATA[Reply to Copy Constructor on Tue, 10 Nov 2009 16:41:22 GMT]]></title><description><![CDATA[<p>So in etwa. Wenn so eine Optimierung stattfindet (&quot;copy elision&quot;) dann verschmelzen quasi Quell- und Ziel-objekt zu einem. Dein Compiler hat hier scheinbar sogar 2 Kopien wegoptimiert:<br />
1. Kopie von tmp als return-Wert (NRVO = named return value optimization)<br />
2. test als Kopie von return-Wert (erlaubt, wenn Quelle ein &quot;rvalue&quot; ist)</p>
<p>Das funktioniert üblicherweise so, dass die Funktion in Wirklichkeit die Adresse von dem neuen zu erstellenden 'test'-Objekt bekommt. 'tmp' und 'test' wären dann dieselben Objekte.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806129</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 10 Nov 2009 16:41:22 GMT</pubDate></item><item><title><![CDATA[Reply to Copy Constructor on Tue, 10 Nov 2009 16:43:22 GMT]]></title><description><![CDATA[<p>joa wenn ich in die fkt() reinspring wird 1x der STD Constructor aufgerufen.<br />
Beim erzeugen von &quot;test&quot; wird aber nichts auferufen...</p>
<p>Wenn ich mit &quot;test&quot; danach noch iwelche operationen ausführe ändert das auch nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806131</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 10 Nov 2009 16:43:22 GMT</pubDate></item><item><title><![CDATA[Reply to Copy Constructor on Tue, 10 Nov 2009 16:44:01 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>der std-ctor sollte aber zumindest aufgerufen werden...</p>
</blockquote>
<p>Möglicherweise wurde das Objekt ganz wegoptimiert, weil nichts damit gemacht wird.</p>
</blockquote>
<p>ich glaube nicht, dass er eine ausgabe wegoptimieren darf...<br />
beim copy-ctor is das was anderes, weils (imho) ausdrücklich im standard erlaubt ist - aber er darf ja auch nicht eine ausgabe allein einfach wegoptimieren...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806132</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 10 Nov 2009 16:44:01 GMT</pubDate></item><item><title><![CDATA[Reply to Copy Constructor on Tue, 10 Nov 2009 16:44:57 GMT]]></title><description><![CDATA[<p>ah k thx@Sebastian Pizer,<br />
das beantwortet meine unwissenheit nun <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/1806133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806133</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 10 Nov 2009 16:44:57 GMT</pubDate></item><item><title><![CDATA[Reply to Copy Constructor on Tue, 10 Nov 2009 16:47:04 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>der std-ctor sollte aber zumindest aufgerufen werden...</p>
</blockquote>
<p>Möglicherweise wurde das Objekt ganz wegoptimiert, weil nichts damit gemacht wird.</p>
</blockquote>
<p>Das darf der Compiler nur, wenn dadurch das Verhalten nicht beobachtbar verändert wird. Nebeneffekte spielen bei &quot;copy elision&quot; allerdings keine Rolle. Hier wird dem Compiler das Wegoptimieren explizit erlaubt, auch wenn der copy ctor besondere Nebeneffekte besitzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806134</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 10 Nov 2009 16:47:04 GMT</pubDate></item><item><title><![CDATA[Reply to Copy Constructor on Tue, 10 Nov 2009 16:47:54 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Das darf der Compiler gar nicht wegen den Nebeneffekten (Ausgabe von Text). Nebeneffekte spielen bei &quot;copy elision&quot; allerdings keine Rolle. Hier wirde dem Compiler das wegoptimieren explizit erlaubt, auch wenn der copy ctor besondere Nebeneffekte besitzt.</p>
</blockquote>
<p>Gut zu wissen, dass copy elision eine Ausnahme ist. Hatte mich selber schon gewundert wegen der Nebeneffekte, aber die Beschreibung des Threaderstellers klang so, als ob gar nichts passiert wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806137</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 10 Nov 2009 16:47:54 GMT</pubDate></item></channel></rss>